diff --git a/CMakeLists.txt b/CMakeLists.txt index 64884e3..2f6ae04 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,10 +1,13 @@ cmake_minimum_required(VERSION 3.5) -project(testcpy) +project(PyWrap) -set( CMAKE_CXX_STANDARD 20) -set( CMAKE_CXX_STANDARD_REQUIRED ON ) +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Python3 3.11...3.11.9 COMPONENTS Interpreter Development REQUIRED) find_package(Torch REQUIRED) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}") + +add_subdirectory(lib/Files) add_subdirectory(src) \ No newline at end of file diff --git a/data/glass.arff b/data/glass.arff new file mode 100755 index 0000000..abd9e3c --- /dev/null +++ b/data/glass.arff @@ -0,0 +1,332 @@ +% 1. Title: Glass Identification Database +% +% 2. Sources: +% (a) Creator: B. German +% -- Central Research Establishment +% Home Office Forensic Science Service +% Aldermaston, Reading, Berkshire RG7 4PN +% (b) Donor: Vina Spiehler, Ph.D., DABFT +% Diagnostic Products Corporation +% (213) 776-0180 (ext 3014) +% (c) Date: September, 1987 +% +% 3. Past Usage: +% -- Rule Induction in Forensic Science +% -- Ian W. Evett and Ernest J. Spiehler +% -- Central Research Establishment +% Home Office Forensic Science Service +% Aldermaston, Reading, Berkshire RG7 4PN +% -- Unknown technical note number (sorry, not listed here) +% -- General Results: nearest neighbor held its own with respect to the +% rule-based system +% +% 4. Relevant Information:n +% Vina conducted a comparison test of her rule-based system, BEAGLE, the +% nearest-neighbor algorithm, and discriminant analysis. BEAGLE is +% a product available through VRS Consulting, Inc.; 4676 Admiralty Way, +% Suite 206; Marina Del Ray, CA 90292 (213) 827-7890 and FAX: -3189. +% In determining whether the glass was a type of "float" glass or not, +% the following results were obtained (# incorrect answers): +% +% Type of Sample Beagle NN DA +% Windows that were float processed (87) 10 12 21 +% Windows that were not: (76) 19 16 22 +% +% The study of classification of types of glass was motivated by +% criminological investigation. At the scene of the crime, the glass left +% can be used as evidence...if it is correctly identified! +% +% 5. Number of Instances: 214 +% +% 6. Number of Attributes: 10 (including an Id#) plus the class attribute +% -- all attributes are continuously valued +% +% 7. Attribute Information: +% 1. Id number: 1 to 214 +% 2. RI: refractive index +% 3. Na: Sodium (unit measurement: weight percent in corresponding oxide, as +% are attributes 4-10) +% 4. Mg: Magnesium +% 5. Al: Aluminum +% 6. Si: Silicon +% 7. K: Potassium +% 8. Ca: Calcium +% 9. Ba: Barium +% 10. Fe: Iron +% 11. Type of glass: (class attribute) +% -- 1 building_windows_float_processed +% -- 2 building_windows_non_float_processed +% -- 3 vehicle_windows_float_processed +% -- 4 vehicle_windows_non_float_processed (none in this database) +% -- 5 containers +% -- 6 tableware +% -- 7 headlamps +% +% 8. Missing Attribute Values: None +% +% Summary Statistics: +% Attribute: Min Max Mean SD Correlation with class +% 2. RI: 1.5112 1.5339 1.5184 0.0030 -0.1642 +% 3. Na: 10.73 17.38 13.4079 0.8166 0.5030 +% 4. Mg: 0 4.49 2.6845 1.4424 -0.7447 +% 5. Al: 0.29 3.5 1.4449 0.4993 0.5988 +% 6. Si: 69.81 75.41 72.6509 0.7745 0.1515 +% 7. K: 0 6.21 0.4971 0.6522 -0.0100 +% 8. Ca: 5.43 16.19 8.9570 1.4232 0.0007 +% 9. Ba: 0 3.15 0.1750 0.4972 0.5751 +% 10. Fe: 0 0.51 0.0570 0.0974 -0.1879 +% +% 9. Class Distribution: (out of 214 total instances) +% -- 163 Window glass (building windows and vehicle windows) +% -- 87 float processed +% -- 70 building windows +% -- 17 vehicle windows +% -- 76 non-float processed +% -- 76 building windows +% -- 0 vehicle windows +% -- 51 Non-window glass +% -- 13 containers +% -- 9 tableware +% -- 29 headlamps +% +% +% +% +% +% +% +% Relabeled values in attribute 'Type' +% From: '1' To: 'build wind float' +% From: '2' To: 'build wind non-float' +% From: '3' To: 'vehic wind float' +% From: '4' To: 'vehic wind non-float' +% From: '5' To: containers +% From: '6' To: tableware +% From: '7' To: headlamps +% +@relation Glass +@attribute 'RI' real +@attribute 'Na' real +@attribute 'Mg' real +@attribute 'Al' real +@attribute 'Si' real +@attribute 'K' real +@attribute 'Ca' real +@attribute 'Ba' real +@attribute 'Fe' real +@attribute 'Type' { 'build wind float', 'build wind non-float', 'vehic wind float', 'vehic wind non-float', containers, tableware, headlamps} +@data +1.51793,12.79,3.5,1.12,73.03,0.64,8.77,0,0,'build wind float' +1.51643,12.16,3.52,1.35,72.89,0.57,8.53,0,0,'vehic wind float' +1.51793,13.21,3.48,1.41,72.64,0.59,8.43,0,0,'build wind float' +1.51299,14.4,1.74,1.54,74.55,0,7.59,0,0,tableware +1.53393,12.3,0,1,70.16,0.12,16.19,0,0.24,'build wind non-float' +1.51655,12.75,2.85,1.44,73.27,0.57,8.79,0.11,0.22,'build wind non-float' +1.51779,13.64,3.65,0.65,73,0.06,8.93,0,0,'vehic wind float' +1.51837,13.14,2.84,1.28,72.85,0.55,9.07,0,0,'build wind float' +1.51545,14.14,0,2.68,73.39,0.08,9.07,0.61,0.05,headlamps +1.51789,13.19,3.9,1.3,72.33,0.55,8.44,0,0.28,'build wind non-float' +1.51625,13.36,3.58,1.49,72.72,0.45,8.21,0,0,'build wind non-float' +1.51743,12.2,3.25,1.16,73.55,0.62,8.9,0,0.24,'build wind non-float' +1.52223,13.21,3.77,0.79,71.99,0.13,10.02,0,0,'build wind float' +1.52121,14.03,3.76,0.58,71.79,0.11,9.65,0,0,'vehic wind float' +1.51665,13.14,3.45,1.76,72.48,0.6,8.38,0,0.17,'vehic wind float' +1.51707,13.48,3.48,1.71,72.52,0.62,7.99,0,0,'build wind non-float' +1.51719,14.75,0,2,73.02,0,8.53,1.59,0.08,headlamps +1.51629,12.71,3.33,1.49,73.28,0.67,8.24,0,0,'build wind non-float' +1.51994,13.27,0,1.76,73.03,0.47,11.32,0,0,containers +1.51811,12.96,2.96,1.43,72.92,0.6,8.79,0.14,0,'build wind non-float' +1.52152,13.05,3.65,0.87,72.22,0.19,9.85,0,0.17,'build wind float' +1.52475,11.45,0,1.88,72.19,0.81,13.24,0,0.34,'build wind non-float' +1.51841,12.93,3.74,1.11,72.28,0.64,8.96,0,0.22,'build wind non-float' +1.51754,13.39,3.66,1.19,72.79,0.57,8.27,0,0.11,'build wind float' +1.52058,12.85,1.61,2.17,72.18,0.76,9.7,0.24,0.51,containers +1.51569,13.24,3.49,1.47,73.25,0.38,8.03,0,0,'build wind non-float' +1.5159,12.82,3.52,1.9,72.86,0.69,7.97,0,0,'build wind non-float' +1.51683,14.56,0,1.98,73.29,0,8.52,1.57,0.07,headlamps +1.51687,13.23,3.54,1.48,72.84,0.56,8.1,0,0,'build wind non-float' +1.5161,13.33,3.53,1.34,72.67,0.56,8.33,0,0,'vehic wind float' +1.51674,12.87,3.56,1.64,73.14,0.65,7.99,0,0,'build wind non-float' +1.51832,13.33,3.34,1.54,72.14,0.56,8.99,0,0,'vehic wind float' +1.51115,17.38,0,0.34,75.41,0,6.65,0,0,tableware +1.51645,13.44,3.61,1.54,72.39,0.66,8.03,0,0,'build wind non-float' +1.51755,13,3.6,1.36,72.99,0.57,8.4,0,0.11,'build wind float' +1.51571,12.72,3.46,1.56,73.2,0.67,8.09,0,0.24,'build wind float' +1.51596,12.79,3.61,1.62,72.97,0.64,8.07,0,0.26,'build wind float' +1.5173,12.35,2.72,1.63,72.87,0.7,9.23,0,0,'build wind non-float' +1.51662,12.85,3.51,1.44,73.01,0.68,8.23,0.06,0.25,'build wind non-float' +1.51409,14.25,3.09,2.08,72.28,1.1,7.08,0,0,'build wind non-float' +1.51797,12.74,3.48,1.35,72.96,0.64,8.68,0,0,'build wind float' +1.51806,13,3.8,1.08,73.07,0.56,8.38,0,0.12,'build wind non-float' +1.51627,13,3.58,1.54,72.83,0.61,8.04,0,0,'build wind non-float' +1.5159,13.24,3.34,1.47,73.1,0.39,8.22,0,0,'build wind non-float' +1.51934,13.64,3.54,0.75,72.65,0.16,8.89,0.15,0.24,'vehic wind float' +1.51755,12.71,3.42,1.2,73.2,0.59,8.64,0,0,'build wind float' +1.51514,14.01,2.68,3.5,69.89,1.68,5.87,2.2,0,containers +1.51766,13.21,3.69,1.29,72.61,0.57,8.22,0,0,'build wind float' +1.51784,13.08,3.49,1.28,72.86,0.6,8.49,0,0,'build wind float' +1.52177,13.2,3.68,1.15,72.75,0.54,8.52,0,0,'build wind non-float' +1.51753,12.57,3.47,1.38,73.39,0.6,8.55,0,0.06,'build wind float' +1.51851,13.2,3.63,1.07,72.83,0.57,8.41,0.09,0.17,'build wind non-float' +1.51743,13.3,3.6,1.14,73.09,0.58,8.17,0,0,'build wind float' +1.51593,13.09,3.59,1.52,73.1,0.67,7.83,0,0,'build wind non-float' +1.5164,14.37,0,2.74,72.85,0,9.45,0.54,0,headlamps +1.51735,13.02,3.54,1.69,72.73,0.54,8.44,0,0.07,'build wind float' +1.52247,14.86,2.2,2.06,70.26,0.76,9.76,0,0,headlamps +1.52099,13.69,3.59,1.12,71.96,0.09,9.4,0,0,'build wind float' +1.51769,13.65,3.66,1.11,72.77,0.11,8.6,0,0,'vehic wind float' +1.51846,13.41,3.89,1.33,72.38,0.51,8.28,0,0,'build wind non-float' +1.51848,13.64,3.87,1.27,71.96,0.54,8.32,0,0.32,'build wind non-float' +1.51905,13.6,3.62,1.11,72.64,0.14,8.76,0,0,'build wind float' +1.51567,13.29,3.45,1.21,72.74,0.56,8.57,0,0,'build wind float' +1.52213,14.21,3.82,0.47,71.77,0.11,9.57,0,0,'build wind float' +1.5232,13.72,3.72,0.51,71.75,0.09,10.06,0,0.16,'build wind float' +1.51556,13.87,0,2.54,73.23,0.14,9.41,0.81,0.01,headlamps +1.51926,13.2,3.33,1.28,72.36,0.6,9.14,0,0.11,'build wind float' +1.52211,14.19,3.78,0.91,71.36,0.23,9.14,0,0.37,'vehic wind float' +1.53125,10.73,0,2.1,69.81,0.58,13.3,3.15,0.28,'build wind non-float' +1.52152,13.05,3.65,0.87,72.32,0.19,9.85,0,0.17,'build wind float' +1.51829,14.46,2.24,1.62,72.38,0,9.26,0,0,tableware +1.51892,13.46,3.83,1.26,72.55,0.57,8.21,0,0.14,'build wind non-float' +1.51888,14.99,0.78,1.74,72.5,0,9.95,0,0,tableware +1.51829,13.24,3.9,1.41,72.33,0.55,8.31,0,0.1,'build wind non-float' +1.523,13.31,3.58,0.82,71.99,0.12,10.17,0,0.03,'build wind float' +1.51652,13.56,3.57,1.47,72.45,0.64,7.96,0,0,'build wind non-float' +1.51768,12.56,3.52,1.43,73.15,0.57,8.54,0,0,'build wind float' +1.51215,12.99,3.47,1.12,72.98,0.62,8.35,0,0.31,'build wind float' +1.51646,13.04,3.4,1.26,73.01,0.52,8.58,0,0,'vehic wind float' +1.51721,12.87,3.48,1.33,73.04,0.56,8.43,0,0,'build wind float' +1.51763,12.8,3.66,1.27,73.01,0.6,8.56,0,0,'build wind float' +1.51742,13.27,3.62,1.24,73.08,0.55,8.07,0,0,'build wind float' +1.52127,14.32,3.9,0.83,71.5,0,9.49,0,0,'vehic wind float' +1.51779,13.21,3.39,1.33,72.76,0.59,8.59,0,0,'build wind float' +1.52171,11.56,1.88,1.56,72.86,0.47,11.41,0,0,containers +1.518,13.71,3.93,1.54,71.81,0.54,8.21,0,0.15,'build wind non-float' +1.52777,12.64,0,0.67,72.02,0.06,14.4,0,0,'build wind non-float' +1.5175,12.82,3.55,1.49,72.75,0.54,8.52,0,0.19,'build wind float' +1.51764,12.98,3.54,1.21,73,0.65,8.53,0,0,'build wind float' +1.52177,13.75,1.01,1.36,72.19,0.33,11.14,0,0,'build wind non-float' +1.51645,14.94,0,1.87,73.11,0,8.67,1.38,0,headlamps +1.51786,12.73,3.43,1.19,72.95,0.62,8.76,0,0.3,'build wind float' +1.52152,13.12,3.58,0.9,72.2,0.23,9.82,0,0.16,'build wind float' +1.51937,13.79,2.41,1.19,72.76,0,9.77,0,0,tableware +1.51514,14.85,0,2.42,73.72,0,8.39,0.56,0,headlamps +1.52172,13.48,3.74,0.9,72.01,0.18,9.61,0,0.07,'build wind float' +1.51732,14.95,0,1.8,72.99,0,8.61,1.55,0,headlamps +1.5202,13.98,1.35,1.63,71.76,0.39,10.56,0,0.18,'build wind non-float' +1.51605,12.9,3.44,1.45,73.06,0.44,8.27,0,0,'build wind non-float' +1.51847,13.1,3.97,1.19,72.44,0.6,8.43,0,0,'build wind non-float' +1.51761,13.89,3.6,1.36,72.73,0.48,7.83,0,0,'build wind float' +1.51673,13.3,3.64,1.53,72.53,0.65,8.03,0,0.29,'build wind non-float' +1.52365,15.79,1.83,1.31,70.43,0.31,8.61,1.68,0,headlamps +1.51685,14.92,0,1.99,73.06,0,8.4,1.59,0,headlamps +1.51658,14.8,0,1.99,73.11,0,8.28,1.71,0,headlamps +1.51316,13.02,0,3.04,70.48,6.21,6.96,0,0,containers +1.51709,13,3.47,1.79,72.72,0.66,8.18,0,0,'build wind non-float' +1.51727,14.7,0,2.34,73.28,0,8.95,0.66,0,headlamps +1.51898,13.58,3.35,1.23,72.08,0.59,8.91,0,0,'build wind float' +1.51969,12.64,0,1.65,73.75,0.38,11.53,0,0,containers +1.5182,12.62,2.76,0.83,73.81,0.35,9.42,0,0.2,'build wind non-float' +1.51617,14.95,0,2.27,73.3,0,8.71,0.67,0,headlamps +1.51911,13.9,3.73,1.18,72.12,0.06,8.89,0,0,'build wind float' +1.51651,14.38,0,1.94,73.61,0,8.48,1.57,0,headlamps +1.51694,12.86,3.58,1.31,72.61,0.61,8.79,0,0,'vehic wind float' +1.52315,13.44,3.34,1.23,72.38,0.6,8.83,0,0,headlamps +1.52068,13.55,2.09,1.67,72.18,0.53,9.57,0.27,0.17,'build wind non-float' +1.51838,14.32,3.26,2.22,71.25,1.46,5.79,1.63,0,headlamps +1.51818,13.72,0,0.56,74.45,0,10.99,0,0,'build wind non-float' +1.51769,12.45,2.71,1.29,73.7,0.56,9.06,0,0.24,'build wind float' +1.5166,12.99,3.18,1.23,72.97,0.58,8.81,0,0.24,'build wind non-float' +1.51589,12.88,3.43,1.4,73.28,0.69,8.05,0,0.24,'build wind float' +1.5241,13.83,2.9,1.17,71.15,0.08,10.79,0,0,'build wind non-float' +1.52725,13.8,3.15,0.66,70.57,0.08,11.64,0,0,'build wind non-float' +1.52119,12.97,0.33,1.51,73.39,0.13,11.27,0,0.28,containers +1.51748,12.86,3.56,1.27,73.21,0.54,8.38,0,0.17,'build wind float' +1.51653,11.95,0,1.19,75.18,2.7,8.93,0,0,headlamps +1.51623,14.14,0,2.88,72.61,0.08,9.18,1.06,0,headlamps +1.52101,13.64,4.49,1.1,71.78,0.06,8.75,0,0,'build wind float' +1.51763,12.61,3.59,1.31,73.29,0.58,8.5,0,0,'build wind float' +1.51596,13.02,3.56,1.54,73.11,0.72,7.9,0,0,'build wind non-float' +1.51674,12.79,3.52,1.54,73.36,0.66,7.9,0,0,'build wind non-float' +1.52065,14.36,0,2.02,73.42,0,8.44,1.64,0,headlamps +1.51768,12.65,3.56,1.3,73.08,0.61,8.69,0,0.14,'build wind float' +1.52369,13.44,0,1.58,72.22,0.32,12.24,0,0,containers +1.51756,13.15,3.61,1.05,73.24,0.57,8.24,0,0,'build wind float' +1.51754,13.48,3.74,1.17,72.99,0.59,8.03,0,0,'build wind float' +1.51711,12.89,3.62,1.57,72.96,0.61,8.11,0,0,'build wind non-float' +1.5221,13.73,3.84,0.72,71.76,0.17,9.74,0,0,'build wind float' +1.51594,13.09,3.52,1.55,72.87,0.68,8.05,0,0.09,'build wind non-float' +1.51784,12.68,3.67,1.16,73.11,0.61,8.7,0,0,'build wind float' +1.51909,13.89,3.53,1.32,71.81,0.51,8.78,0.11,0,'build wind float' +1.51977,13.81,3.58,1.32,71.72,0.12,8.67,0.69,0,'build wind float' +1.51666,12.86,0,1.83,73.88,0.97,10.17,0,0,containers +1.51631,13.34,3.57,1.57,72.87,0.61,7.89,0,0,'build wind non-float' +1.51872,12.93,3.66,1.56,72.51,0.58,8.55,0,0.12,'build wind non-float' +1.51708,13.72,3.68,1.81,72.06,0.64,7.88,0,0,'build wind non-float' +1.52081,13.78,2.28,1.43,71.99,0.49,9.85,0,0.17,'build wind non-float' +1.51574,14.86,3.67,1.74,71.87,0.16,7.36,0,0.12,'build wind non-float' +1.51813,13.43,3.98,1.18,72.49,0.58,8.15,0,0,'build wind non-float' +1.51131,13.69,3.2,1.81,72.81,1.76,5.43,1.19,0,headlamps +1.52227,14.17,3.81,0.78,71.35,0,9.69,0,0,'build wind float' +1.52614,13.7,0,1.36,71.24,0.19,13.44,0,0.1,'build wind non-float' +1.51811,13.33,3.85,1.25,72.78,0.52,8.12,0,0,'build wind non-float' +1.51655,13.41,3.39,1.28,72.64,0.52,8.65,0,0,'vehic wind float' +1.51751,12.81,3.57,1.35,73.02,0.62,8.59,0,0,'build wind float' +1.51508,15.15,0,2.25,73.5,0,8.34,0.63,0,headlamps +1.51915,12.73,1.85,1.86,72.69,0.6,10.09,0,0,containers +1.51966,14.77,3.75,0.29,72.02,0.03,9,0,0,'build wind float' +1.51844,13.25,3.76,1.32,72.4,0.58,8.42,0,0,'build wind non-float' +1.52664,11.23,0,0.77,73.21,0,14.68,0,0,'build wind non-float' +1.52172,13.51,3.86,0.88,71.79,0.23,9.54,0,0.11,'build wind float' +1.51602,14.85,0,2.38,73.28,0,8.76,0.64,0.09,headlamps +1.51321,13,0,3.02,70.7,6.21,6.93,0,0,containers +1.52739,11.02,0,0.75,73.08,0,14.96,0,0,'build wind non-float' +1.52213,14.21,3.82,0.47,71.77,0.11,9.57,0,0,'build wind float' +1.51747,12.84,3.5,1.14,73.27,0.56,8.55,0,0,'build wind float' +1.51839,12.85,3.67,1.24,72.57,0.62,8.68,0,0.35,'build wind non-float' +1.51646,13.41,3.55,1.25,72.81,0.68,8.1,0,0,'build wind non-float' +1.51609,15.01,0,2.51,73.05,0.05,8.83,0.53,0,headlamps +1.51667,12.94,3.61,1.26,72.75,0.56,8.6,0,0,'build wind non-float' +1.51588,13.12,3.41,1.58,73.26,0.07,8.39,0,0.19,'build wind non-float' +1.52667,13.99,3.7,0.71,71.57,0.02,9.82,0,0.1,'build wind float' +1.51831,14.39,0,1.82,72.86,1.41,6.47,2.88,0,headlamps +1.51918,14.04,3.58,1.37,72.08,0.56,8.3,0,0,'build wind float' +1.51613,13.88,1.78,1.79,73.1,0,8.67,0.76,0,headlamps +1.52196,14.36,3.85,0.89,71.36,0.15,9.15,0,0,'build wind float' +1.51824,12.87,3.48,1.29,72.95,0.6,8.43,0,0,'build wind float' +1.52151,11.03,1.71,1.56,73.44,0.58,11.62,0,0,containers +1.51969,14.56,0,0.56,73.48,0,11.22,0,0,tableware +1.51618,13.01,3.5,1.48,72.89,0.6,8.12,0,0,'build wind non-float' +1.51645,13.4,3.49,1.52,72.65,0.67,8.08,0,0.1,'build wind non-float' +1.51796,13.5,3.36,1.63,71.94,0.57,8.81,0,0.09,'vehic wind float' +1.52222,14.43,0,1,72.67,0.1,11.52,0,0.08,'build wind non-float' +1.51783,12.69,3.54,1.34,72.95,0.57,8.75,0,0,'build wind float' +1.51711,14.23,0,2.08,73.36,0,8.62,1.67,0,headlamps +1.51736,12.78,3.62,1.29,72.79,0.59,8.7,0,0,'build wind float' +1.51808,13.43,2.87,1.19,72.84,0.55,9.03,0,0,'build wind float' +1.5167,13.24,3.57,1.38,72.7,0.56,8.44,0,0.1,'vehic wind float' +1.52043,13.38,0,1.4,72.25,0.33,12.5,0,0,containers +1.519,13.49,3.48,1.35,71.95,0.55,9,0,0,'build wind float' +1.51778,13.21,2.81,1.29,72.98,0.51,9.02,0,0.09,'build wind float' +1.51905,14,2.39,1.56,72.37,0,9.57,0,0,tableware +1.51531,14.38,0,2.66,73.1,0.04,9.08,0.64,0,headlamps +1.51916,14.15,0,2.09,72.74,0,10.88,0,0,tableware +1.51841,13.02,3.62,1.06,72.34,0.64,9.13,0,0.15,'build wind non-float' +1.5159,13.02,3.58,1.51,73.12,0.69,7.96,0,0,'build wind non-float' +1.51593,13.25,3.45,1.43,73.17,0.61,7.86,0,0,'build wind non-float' +1.5164,12.55,3.48,1.87,73.23,0.63,8.08,0,0.09,'build wind non-float' +1.51663,12.93,3.54,1.62,72.96,0.64,8.03,0,0.21,'build wind non-float' +1.5169,13.33,3.54,1.61,72.54,0.68,8.11,0,0,'build wind non-float' +1.51869,13.19,3.37,1.18,72.72,0.57,8.83,0,0.16,'build wind float' +1.51776,13.53,3.41,1.52,72.04,0.58,8.79,0,0,'vehic wind float' +1.51775,12.85,3.48,1.23,72.97,0.61,8.56,0.09,0.22,'build wind float' +1.5186,13.36,3.43,1.43,72.26,0.51,8.6,0,0,'build wind non-float' +1.5172,13.38,3.5,1.15,72.85,0.5,8.43,0,0,'build wind float' +1.51623,14.2,0,2.79,73.46,0.04,9.04,0.4,0.09,headlamps +1.51618,13.53,3.55,1.54,72.99,0.39,7.78,0,0,'build wind float' +1.51761,12.81,3.54,1.23,73.24,0.58,8.39,0,0,'build wind float' +1.5161,13.42,3.4,1.22,72.69,0.59,8.32,0,0,'vehic wind float' +1.51592,12.86,3.52,2.12,72.66,0.69,7.97,0,0,'build wind non-float' +1.51613,13.92,3.52,1.25,72.88,0.37,7.94,0,0.14,'build wind non-float' +1.51689,12.67,2.88,1.71,73.21,0.73,8.54,0,0,'build wind non-float' +1.51852,14.09,2.19,1.66,72.67,0,9.32,0,0,tableware diff --git a/data/iris.arff b/data/iris.arff new file mode 100755 index 0000000..780480c --- /dev/null +++ b/data/iris.arff @@ -0,0 +1,225 @@ +% 1. Title: Iris Plants Database +% +% 2. Sources: +% (a) Creator: R.A. Fisher +% (b) Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov) +% (c) Date: July, 1988 +% +% 3. Past Usage: +% - Publications: too many to mention!!! Here are a few. +% 1. Fisher,R.A. "The use of multiple measurements in taxonomic problems" +% Annual Eugenics, 7, Part II, 179-188 (1936); also in "Contributions +% to Mathematical Statistics" (John Wiley, NY, 1950). +% 2. Duda,R.O., & Hart,P.E. (1973) Pattern Classification and Scene Analysis. +% (Q327.D83) John Wiley & Sons. ISBN 0-471-22361-1. See page 218. +% 3. Dasarathy, B.V. (1980) "Nosing Around the Neighborhood: A New System +% Structure and Classification Rule for Recognition in Partially Exposed +% Environments". IEEE Transactions on Pattern Analysis and Machine +% Intelligence, Vol. PAMI-2, No. 1, 67-71. +% -- Results: +% -- very low misclassification rates (0% for the setosa class) +% 4. Gates, G.W. (1972) "The Reduced Nearest Neighbor Rule". IEEE +% Transactions on Information Theory, May 1972, 431-433. +% -- Results: +% -- very low misclassification rates again +% 5. See also: 1988 MLC Proceedings, 54-64. Cheeseman et al's AUTOCLASS II +% conceptual clustering system finds 3 classes in the data. +% +% 4. Relevant Information: +% --- This is perhaps the best known database to be found in the pattern +% recognition literature. Fisher's paper is a classic in the field +% and is referenced frequently to this day. (See Duda & Hart, for +% example.) The data set contains 3 classes of 50 instances each, +% where each class refers to a type of iris plant. One class is +% linearly separable from the other 2; the latter are NOT linearly +% separable from each other. +% --- Predicted attribute: class of iris plant. +% --- This is an exceedingly simple domain. +% +% 5. Number of Instances: 150 (50 in each of three classes) +% +% 6. Number of Attributes: 4 numeric, predictive attributes and the class +% +% 7. Attribute Information: +% 1. sepal length in cm +% 2. sepal width in cm +% 3. petal length in cm +% 4. petal width in cm +% 5. class: +% -- Iris Setosa +% -- Iris Versicolour +% -- Iris Virginica +% +% 8. Missing Attribute Values: None +% +% Summary Statistics: +% Min Max Mean SD Class Correlation +% sepal length: 4.3 7.9 5.84 0.83 0.7826 +% sepal width: 2.0 4.4 3.05 0.43 -0.4194 +% petal length: 1.0 6.9 3.76 1.76 0.9490 (high!) +% petal width: 0.1 2.5 1.20 0.76 0.9565 (high!) +% +% 9. Class Distribution: 33.3% for each of 3 classes. + +@RELATION iris + +@ATTRIBUTE sepallength REAL +@ATTRIBUTE sepalwidth REAL +@ATTRIBUTE petallength REAL +@ATTRIBUTE petalwidth REAL +@ATTRIBUTE class {Iris-setosa,Iris-versicolor,Iris-virginica} + +@DATA +5.1,3.5,1.4,0.2,Iris-setosa +4.9,3.0,1.4,0.2,Iris-setosa +4.7,3.2,1.3,0.2,Iris-setosa +4.6,3.1,1.5,0.2,Iris-setosa +5.0,3.6,1.4,0.2,Iris-setosa +5.4,3.9,1.7,0.4,Iris-setosa +4.6,3.4,1.4,0.3,Iris-setosa +5.0,3.4,1.5,0.2,Iris-setosa +4.4,2.9,1.4,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +5.4,3.7,1.5,0.2,Iris-setosa +4.8,3.4,1.6,0.2,Iris-setosa +4.8,3.0,1.4,0.1,Iris-setosa +4.3,3.0,1.1,0.1,Iris-setosa +5.8,4.0,1.2,0.2,Iris-setosa +5.7,4.4,1.5,0.4,Iris-setosa +5.4,3.9,1.3,0.4,Iris-setosa +5.1,3.5,1.4,0.3,Iris-setosa +5.7,3.8,1.7,0.3,Iris-setosa +5.1,3.8,1.5,0.3,Iris-setosa +5.4,3.4,1.7,0.2,Iris-setosa +5.1,3.7,1.5,0.4,Iris-setosa +4.6,3.6,1.0,0.2,Iris-setosa +5.1,3.3,1.7,0.5,Iris-setosa +4.8,3.4,1.9,0.2,Iris-setosa +5.0,3.0,1.6,0.2,Iris-setosa +5.0,3.4,1.6,0.4,Iris-setosa +5.2,3.5,1.5,0.2,Iris-setosa +5.2,3.4,1.4,0.2,Iris-setosa +4.7,3.2,1.6,0.2,Iris-setosa +4.8,3.1,1.6,0.2,Iris-setosa +5.4,3.4,1.5,0.4,Iris-setosa +5.2,4.1,1.5,0.1,Iris-setosa +5.5,4.2,1.4,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +5.0,3.2,1.2,0.2,Iris-setosa +5.5,3.5,1.3,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +4.4,3.0,1.3,0.2,Iris-setosa +5.1,3.4,1.5,0.2,Iris-setosa +5.0,3.5,1.3,0.3,Iris-setosa +4.5,2.3,1.3,0.3,Iris-setosa +4.4,3.2,1.3,0.2,Iris-setosa +5.0,3.5,1.6,0.6,Iris-setosa +5.1,3.8,1.9,0.4,Iris-setosa +4.8,3.0,1.4,0.3,Iris-setosa +5.1,3.8,1.6,0.2,Iris-setosa +4.6,3.2,1.4,0.2,Iris-setosa +5.3,3.7,1.5,0.2,Iris-setosa +5.0,3.3,1.4,0.2,Iris-setosa +7.0,3.2,4.7,1.4,Iris-versicolor +6.4,3.2,4.5,1.5,Iris-versicolor +6.9,3.1,4.9,1.5,Iris-versicolor +5.5,2.3,4.0,1.3,Iris-versicolor +6.5,2.8,4.6,1.5,Iris-versicolor +5.7,2.8,4.5,1.3,Iris-versicolor +6.3,3.3,4.7,1.6,Iris-versicolor +4.9,2.4,3.3,1.0,Iris-versicolor +6.6,2.9,4.6,1.3,Iris-versicolor +5.2,2.7,3.9,1.4,Iris-versicolor +5.0,2.0,3.5,1.0,Iris-versicolor +5.9,3.0,4.2,1.5,Iris-versicolor +6.0,2.2,4.0,1.0,Iris-versicolor +6.1,2.9,4.7,1.4,Iris-versicolor +5.6,2.9,3.6,1.3,Iris-versicolor +6.7,3.1,4.4,1.4,Iris-versicolor +5.6,3.0,4.5,1.5,Iris-versicolor +5.8,2.7,4.1,1.0,Iris-versicolor +6.2,2.2,4.5,1.5,Iris-versicolor +5.6,2.5,3.9,1.1,Iris-versicolor +5.9,3.2,4.8,1.8,Iris-versicolor +6.1,2.8,4.0,1.3,Iris-versicolor +6.3,2.5,4.9,1.5,Iris-versicolor +6.1,2.8,4.7,1.2,Iris-versicolor +6.4,2.9,4.3,1.3,Iris-versicolor +6.6,3.0,4.4,1.4,Iris-versicolor +6.8,2.8,4.8,1.4,Iris-versicolor +6.7,3.0,5.0,1.7,Iris-versicolor +6.0,2.9,4.5,1.5,Iris-versicolor +5.7,2.6,3.5,1.0,Iris-versicolor +5.5,2.4,3.8,1.1,Iris-versicolor +5.5,2.4,3.7,1.0,Iris-versicolor +5.8,2.7,3.9,1.2,Iris-versicolor +6.0,2.7,5.1,1.6,Iris-versicolor +5.4,3.0,4.5,1.5,Iris-versicolor +6.0,3.4,4.5,1.6,Iris-versicolor +6.7,3.1,4.7,1.5,Iris-versicolor +6.3,2.3,4.4,1.3,Iris-versicolor +5.6,3.0,4.1,1.3,Iris-versicolor +5.5,2.5,4.0,1.3,Iris-versicolor +5.5,2.6,4.4,1.2,Iris-versicolor +6.1,3.0,4.6,1.4,Iris-versicolor +5.8,2.6,4.0,1.2,Iris-versicolor +5.0,2.3,3.3,1.0,Iris-versicolor +5.6,2.7,4.2,1.3,Iris-versicolor +5.7,3.0,4.2,1.2,Iris-versicolor +5.7,2.9,4.2,1.3,Iris-versicolor +6.2,2.9,4.3,1.3,Iris-versicolor +5.1,2.5,3.0,1.1,Iris-versicolor +5.7,2.8,4.1,1.3,Iris-versicolor +6.3,3.3,6.0,2.5,Iris-virginica +5.8,2.7,5.1,1.9,Iris-virginica +7.1,3.0,5.9,2.1,Iris-virginica +6.3,2.9,5.6,1.8,Iris-virginica +6.5,3.0,5.8,2.2,Iris-virginica +7.6,3.0,6.6,2.1,Iris-virginica +4.9,2.5,4.5,1.7,Iris-virginica +7.3,2.9,6.3,1.8,Iris-virginica +6.7,2.5,5.8,1.8,Iris-virginica +7.2,3.6,6.1,2.5,Iris-virginica +6.5,3.2,5.1,2.0,Iris-virginica +6.4,2.7,5.3,1.9,Iris-virginica +6.8,3.0,5.5,2.1,Iris-virginica +5.7,2.5,5.0,2.0,Iris-virginica +5.8,2.8,5.1,2.4,Iris-virginica +6.4,3.2,5.3,2.3,Iris-virginica +6.5,3.0,5.5,1.8,Iris-virginica +7.7,3.8,6.7,2.2,Iris-virginica +7.7,2.6,6.9,2.3,Iris-virginica +6.0,2.2,5.0,1.5,Iris-virginica +6.9,3.2,5.7,2.3,Iris-virginica +5.6,2.8,4.9,2.0,Iris-virginica +7.7,2.8,6.7,2.0,Iris-virginica +6.3,2.7,4.9,1.8,Iris-virginica +6.7,3.3,5.7,2.1,Iris-virginica +7.2,3.2,6.0,1.8,Iris-virginica +6.2,2.8,4.8,1.8,Iris-virginica +6.1,3.0,4.9,1.8,Iris-virginica +6.4,2.8,5.6,2.1,Iris-virginica +7.2,3.0,5.8,1.6,Iris-virginica +7.4,2.8,6.1,1.9,Iris-virginica +7.9,3.8,6.4,2.0,Iris-virginica +6.4,2.8,5.6,2.2,Iris-virginica +6.3,2.8,5.1,1.5,Iris-virginica +6.1,2.6,5.6,1.4,Iris-virginica +7.7,3.0,6.1,2.3,Iris-virginica +6.3,3.4,5.6,2.4,Iris-virginica +6.4,3.1,5.5,1.8,Iris-virginica +6.0,3.0,4.8,1.8,Iris-virginica +6.9,3.1,5.4,2.1,Iris-virginica +6.7,3.1,5.6,2.4,Iris-virginica +6.9,3.1,5.1,2.3,Iris-virginica +5.8,2.7,5.1,1.9,Iris-virginica +6.8,3.2,5.9,2.3,Iris-virginica +6.7,3.3,5.7,2.5,Iris-virginica +6.7,3.0,5.2,2.3,Iris-virginica +6.3,2.5,5.0,1.9,Iris-virginica +6.5,3.0,5.2,2.0,Iris-virginica +6.2,3.4,5.4,2.3,Iris-virginica +5.9,3.0,5.1,1.8,Iris-virginica +% +% +% diff --git a/lib/Files/ArffFiles.cc b/lib/Files/ArffFiles.cc new file mode 100644 index 0000000..4039b0b --- /dev/null +++ b/lib/Files/ArffFiles.cc @@ -0,0 +1,170 @@ +#include "ArffFiles.h" +#include +#include +#include +#include + +using namespace std; + +ArffFiles::ArffFiles() = default; + +vector ArffFiles::getLines() const +{ + return lines; +} + +unsigned long int ArffFiles::getSize() const +{ + return lines.size(); +} + +vector> ArffFiles::getAttributes() const +{ + return attributes; +} + +string ArffFiles::getClassName() const +{ + return className; +} + +string ArffFiles::getClassType() const +{ + return classType; +} + +vector>& ArffFiles::getX() +{ + return X; +} + +vector& ArffFiles::getY() +{ + return y; +} + +void ArffFiles::loadCommon(string fileName) +{ + ifstream file(fileName); + if (!file.is_open()) { + throw invalid_argument("Unable to open file"); + } + string line; + string keyword; + string attribute; + string type; + string type_w; + while (getline(file, line)) { + if (line.empty() || line[0] == '%' || line == "\r" || line == " ") { + continue; + } + if (line.find("@attribute") != string::npos || line.find("@ATTRIBUTE") != string::npos) { + stringstream ss(line); + ss >> keyword >> attribute; + type = ""; + while (ss >> type_w) + type += type_w + " "; + attributes.emplace_back(trim(attribute), trim(type)); + continue; + } + if (line[0] == '@') { + continue; + } + lines.push_back(line); + } + file.close(); + if (attributes.empty()) + throw invalid_argument("No attributes found"); +} + +void ArffFiles::load(const string& fileName, bool classLast) +{ + int labelIndex; + loadCommon(fileName); + if (classLast) { + className = get<0>(attributes.back()); + classType = get<1>(attributes.back()); + attributes.pop_back(); + labelIndex = static_cast(attributes.size()); + } else { + className = get<0>(attributes.front()); + classType = get<1>(attributes.front()); + attributes.erase(attributes.begin()); + labelIndex = 0; + } + generateDataset(labelIndex); +} +void ArffFiles::load(const string& fileName, const string& name) +{ + int labelIndex; + loadCommon(fileName); + bool found = false; + for (int i = 0; i < attributes.size(); ++i) { + if (attributes[i].first == name) { + className = get<0>(attributes[i]); + classType = get<1>(attributes[i]); + attributes.erase(attributes.begin() + i); + labelIndex = i; + found = true; + break; + } + } + if (!found) { + throw invalid_argument("Class name not found"); + } + generateDataset(labelIndex); +} + +void ArffFiles::generateDataset(int labelIndex) +{ + X = vector>(attributes.size(), vector(lines.size())); + auto yy = vector(lines.size(), ""); + auto removeLines = vector(); // Lines with missing values + for (size_t i = 0; i < lines.size(); i++) { + stringstream ss(lines[i]); + string value; + int pos = 0; + int xIndex = 0; + while (getline(ss, value, ',')) { + if (pos++ == labelIndex) { + yy[i] = value; + } else { + if (value == "?") { + X[xIndex++][i] = -1; + removeLines.push_back(i); + } else + X[xIndex++][i] = stof(value); + } + } + } + for (auto i : removeLines) { + yy.erase(yy.begin() + i); + for (auto& x : X) { + x.erase(x.begin() + i); + } + } + y = factorize(yy); +} + +string ArffFiles::trim(const string& source) +{ + string s(source); + s.erase(0, s.find_first_not_of(" '\n\r\t")); + s.erase(s.find_last_not_of(" '\n\r\t") + 1); + return s; +} + +vector ArffFiles::factorize(const vector& labels_t) +{ + vector yy; + yy.reserve(labels_t.size()); + map labelMap; + int i = 0; + for (const string& label : labels_t) { + if (labelMap.find(label) == labelMap.end()) { + labelMap[label] = i++; + } + yy.push_back(labelMap[label]); + } + return yy; +} \ No newline at end of file diff --git a/lib/Files/ArffFiles.h b/lib/Files/ArffFiles.h new file mode 100644 index 0000000..5cacb27 --- /dev/null +++ b/lib/Files/ArffFiles.h @@ -0,0 +1,34 @@ +#ifndef ARFFFILES_H +#define ARFFFILES_H + +#include +#include + +using namespace std; + +class ArffFiles { +private: + vector lines; + vector> attributes; + string className; + string classType; + vector> X; + vector y; + void generateDataset(int); + void loadCommon(string); +public: + ArffFiles(); + void load(const string&, bool = true); + void load(const string&, const string&); + vector getLines() const; + unsigned long int getSize() const; + string getClassName() const; + string getClassType() const; + static string trim(const string&); + vector>& getX(); + vector& getY(); + vector> getAttributes() const; + static vector factorize(const vector& labels_t); +}; + +#endif \ No newline at end of file diff --git a/lib/Files/CMakeLists.txt b/lib/Files/CMakeLists.txt new file mode 100644 index 0000000..fce5b8f --- /dev/null +++ b/lib/Files/CMakeLists.txt @@ -0,0 +1 @@ +add_library(ArffFiles ArffFiles.cc) \ No newline at end of file diff --git a/pspp.jnl b/pspp.jnl new file mode 100644 index 0000000..cf047f4 --- /dev/null +++ b/pspp.jnl @@ -0,0 +1 @@ +GET FILE="/home/rmontanana/Code/covbench/data/covid_v9_20220630.sav". diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c93ed54..f02df68 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,6 +1,8 @@ - +include_directories(${PyWrap_SOURCE_DIR}/lib/Files) include_directories(${Python3_INCLUDE_DIRS}) add_executable(main main.cc STree.cc SVC.cc PyClassifier.cc PyWrap.cc) +add_executable(example example.cpp) -target_link_libraries(main ${Python3_LIBRARIES} "${TORCH_LIBRARIES}") +target_link_libraries(main ${Python3_LIBRARIES} "${TORCH_LIBRARIES}" ArffFiles) +target_link_libraries(example "${TORCH_LIBRARIES}" ArffFiles) diff --git a/src/PyClassifier.cc b/src/PyClassifier.cc index 36cc41a..043ea5f 100644 --- a/src/PyClassifier.cc +++ b/src/PyClassifier.cc @@ -13,10 +13,13 @@ namespace pywrap { pyWrap->clean(module, className); } - template - T PyClassifier::callMethod(const std::string& method) + std::string PyClassifier::callMethod(const std::string& method) { - return pyWrap->callMethod(module, className, method); + return pyWrap->callMethodString(module, className, method); + } + PyClassifier& PyClassifier::fit(torch::Tensor& X, torch::Tensor& y, const std::vector& features, const std::string& className, std::map>& states) + { + } } /* namespace PyWrap */ \ No newline at end of file diff --git a/src/PyClassifier.h b/src/PyClassifier.h index a057664..13337ed 100644 --- a/src/PyClassifier.h +++ b/src/PyClassifier.h @@ -12,8 +12,7 @@ namespace pywrap { PyClassifier(const std::string& module, const std::string& className); virtual ~PyClassifier(); PyClassifier& fit(torch::Tensor& X, torch::Tensor& y, const std::vector& features, const std::string& className, std::map>& states); - template - T callMethod(const std::string& method); + std::string callMethod(const std::string& method); private: PyWrap* pyWrap; std::string module; diff --git a/src/PyWrap.cc b/src/PyWrap.cc index d711705..5cc51ed 100644 --- a/src/PyWrap.cc +++ b/src/PyWrap.cc @@ -102,6 +102,24 @@ namespace pywrap { Py_DECREF(result); return value; } + std::string PyWrap::callMethodString(const std::string& moduleName, const std::string& className, const std::string& method) + { + std::cout << "Llamando método" << std::endl; + auto item = moduleClassMap.find({ moduleName, className }); + if (item == moduleClassMap.end()) { + errorAbort("Module " + moduleName + " and class " + className + " not found"); + } + std::cout << "Clase encontrada" << std::endl; + PyObject* instance = std::get<2>(item->second); + PyObject* result; + if (!(result = PyObject_CallMethod(instance, method.c_str(), NULL))) + errorAbort("Couldn't call method " + method); + + std::string value = PyUnicode_AsUTF8(result); + std::cout << "Result: " << value << std::endl; + Py_DECREF(result); + return value; + } // void PyWrap::doCommand2() // { // PyObject* list = Py_BuildValue("[s]", "Stree"); diff --git a/src/PyWrap.h b/src/PyWrap.h index c5d4537..82b9ce9 100644 --- a/src/PyWrap.h +++ b/src/PyWrap.h @@ -18,16 +18,17 @@ namespace pywrap { ~PyWrap(); template T callMethod(const std::string& moduleName, const std::string& className, const std::string& method); - template T returnMethod(PyObject* result); - template std::string returnMethod(PyObject* result); - template int returnMethod(PyObject* result); - template bool returnMethod(PyObject* result); - template torch::Tensor returnMethod(PyObject* result) - { - // PyObject* THPVariable_Wrap(at::Tensor t); - // at::Tensor& THPVariable_Unpack(PyObject * obj); - return THPVariable_Unpack(result); - }; + std::string callMethodString(const std::string& moduleName, const std::string& className, const std::string& method); + // template T returnMethod(PyObject* result); + // template std::string returnMethod(PyObject* result); + // template int returnMethod(PyObject* result); + // template bool returnMethod(PyObject* result); + // template torch::Tensor returnMethod(PyObject* result) + // { + // // PyObject* THPVariable_Wrap(at::Tensor t); + // // at::Tensor& THPVariable_Unpack(PyObject * obj); + // return THPVariable_Unpack(result); + // }; void importClass(const std::string& moduleName, const std::string& className); void clean(const std::string& moduleName, const std::string& className); // void doCommand2(); diff --git a/src/STree.cc b/src/STree.cc index 669b15f..e138601 100644 --- a/src/STree.cc +++ b/src/STree.cc @@ -5,7 +5,7 @@ namespace pywrap { void STree::version() { - std::cout << "Version: " << callMethod("version") << std::endl; + std::cout << "Version: " << callMethod("version") << std::endl; } } /* namespace pywrap */ \ No newline at end of file diff --git a/src/SVC.cc b/src/SVC.cc index d247c06..2d432c6 100644 --- a/src/SVC.cc +++ b/src/SVC.cc @@ -5,7 +5,7 @@ namespace pywrap { void SVC::version() { - //std::cout << "repr_html: " << callMethod("_repr_html_") << std::endl; + std::cout << "repr_html: " << callMethod("_repr_html_") << std::endl; } } /* namespace pywrap */ \ No newline at end of file diff --git a/src/example.cpp b/src/example.cpp index e738315..eb4803f 100644 --- a/src/example.cpp +++ b/src/example.cpp @@ -1,7 +1,10 @@ +#include +#include "ArffFiles.h" #include #include using namespace std; +using namespace torch; class Test { public: Test(const string& c) : c(c) {}; @@ -13,18 +16,45 @@ public: std::cout << "Llamando a metodo" << std::endl; return parameter; } - - private: string c; - }; +tuple, string, map>> loadDataset(const string& name, bool class_last) +{ + auto handler = ArffFiles(); + handler.load(static_cast(name) + ".arff", class_last); + // Get Dataset X, y + vector> X = handler.getX(); + vector y = handler.getY(); + // // Get className & Features + auto className = handler.getClassName(); + vector features; + auto attributes = handler.getAttributes(); + transform(attributes.begin(), attributes.end(), back_inserter(features), [](const auto& pair) { return pair.first; }); + torch::Tensor Xd; + auto states = map>(); + auto yt = torch::tensor(y, torch::kInt32); + Xd = torch::zeros({ static_cast(X.size()), static_cast(X[0].size()) }, torch::kFloat32); + for (int i = 0; i < features.size(); ++i) { + Xd.index_put_({ i, "..." }, torch::tensor(X[i], torch::kFloat32)); + } + return make_tuple(Xd, yt, features, className, states); +} + int main() { Test t("hola"); cout << t.callMethod("hola") << endl; cout << t.callMethod(1) << endl; cout << t.callMethod(7.3) << endl; + vector> X; + vector y = { 1, 2, 3 }; + X.push_back({ 1.1, 2.2, 3.3 }); + vector v = { 1.1, 2.2, 3.3 }; + torch::Tensor matrix = torch::tensor(X[0], torch::kFloat32); + cout << "X:" << matrix << endl; + cout << "y:" << torch::tensor(y, torch::kInt32) << endl; + return 0; } \ No newline at end of file diff --git a/src/main.cc b/src/main.cc index 37e33a1..cc7283a 100644 --- a/src/main.cc +++ b/src/main.cc @@ -1,10 +1,48 @@ +#include +#include "ArffFiles.h" +#include +#include +#include +#include +#include #include "STree.h" #include "SVC.h" +using namespace std; +using namespace torch; + +class Paths { +public: + static string datasets() + { + return "/home/rmontanana/Code/discretizbench/datasets/"; + } +}; + +tuple, string, map>> loadDataset(const string& name, bool class_last) +{ + auto handler = ArffFiles(); + handler.load(Paths::datasets() + static_cast(name) + ".arff", class_last); + // Get Dataset X, y + vector> X = handler.getX(); + vector y = handler.getY(); + // Get className & Features + auto className = handler.getClassName(); + vector features; + auto attributes = handler.getAttributes(); + transform(attributes.begin(), attributes.end(), back_inserter(features), [](const auto& pair) { return pair.first; }); + Tensor Xd; + auto states = map>(); + Xd = torch::zeros({ static_cast(X.size()), static_cast(X[0].size()) }, torch::kFloat32); + for (int i = 0; i < features.size(); ++i) { + Xd.index_put_({ i, "..." }, torch::tensor(X[i], torch::kFloat32)); + } + return { Xd, torch::tensor(y, torch::kInt32), features, className, states }; +} + int main(int argc, char* argv[]) { - // auto wrap = pywrap::PyWrap("stree", "Stree"); - // wrap.callMethod("version"); + auto [X, y, features, className, states] = loadDataset("iris", true); auto stree = pywrap::STree(); stree.version(); auto svc = pywrap::SVC();