diff --git a/components/operators/CMakeLists.txt b/components/operators/CMakeLists.txt index dea9b6df6d15d5c2d49b2d1b081a9fb82e5da16d..bc4edb1ea6ac6c10a0f3d14dfaa768e1a7732206 100644 --- a/components/operators/CMakeLists.txt +++ b/components/operators/CMakeLists.txt @@ -57,4 +57,6 @@ target_include_directories(ftloperators PUBLIC target_link_libraries(ftloperators ftlrender ftlrgbd ftlcommon sgm libstereo Eigen3::Eigen Threads::Threads ${OpenCV_LIBS}) -#ADD_SUBDIRECTORY(test) +if (BUILD_TESTS) + add_subdirectory(test) +endif() diff --git a/components/operators/include/ftl/algorithms/dbscan.hpp b/components/operators/include/ftl/algorithms/dbscan.hpp new file mode 100644 index 0000000000000000000000000000000000000000..7fd21bce1b04d2cd86d1a61dca6cc476d3e3ffc3 --- /dev/null +++ b/components/operators/include/ftl/algorithms/dbscan.hpp @@ -0,0 +1,99 @@ +#ifndef HPP_FTL_ALGORITHMS_DBSCAN_ +#define HPP_FTL_ALGORITHMS_DBSCAN_ + +#include <vector> +#include <deque> +#include <opencv2/core/core.hpp> + +namespace ftl { + +/** + * DBSCAN clustering algorithm. Iterates over each points and assigns a label + * based on local neighborhood. Complexity O(n*O(RangeQuery)) for n points. + * + * points Input parameter: points + * RangeQuery function vector<size_t>(points, i, radius) which returns point + * indices (excluding input point with index i) which are within + * given radius. Called at least once for each point (but at most + * twice). + * min_points DBSCAN parameter: minimum cluster size (core point). + * radius DBSCAN parameter: search radius + * labels Output paramters: cluster labels. Negative labels are used for + * noise. + * centroids Output parameter: cluster centroids + */ +template<typename T> +void dbscan(const std::vector<T> &points, + std::function<std::vector<size_t>(const std::vector<T>&, size_t, float)> RangeQuery, + unsigned int min_points, float radius, + std::vector<short> &labels, std::vector<T> ¢roids) { + + const short NONE = -2; + const short NOISE = -1; + + labels.resize(points.size()); + std::fill(labels.begin(), labels.end(), NONE); + + int cluster_count = 0; + + for (unsigned i = 0; i < points.size(); i++) { + short cluster = NONE; + + if (labels[i] != NONE) { + continue; + } + + // get neighbours of points[i] + std::vector<size_t> neighbors = RangeQuery(points, i, radius); + + if (neighbors.size() < min_points) { + labels[i] = NOISE; + continue; + } + + // assign new cluster id + cluster = cluster_count++; + + labels[i] = cluster; + T centroid = points[i]; + int n_points = 1; + + // seed_set: neighboring points to this cluster + std::deque<size_t> seed_set; + for (const auto &n : neighbors) { + seed_set.push_back(n); + } + + while(!seed_set.empty()) { + auto i_n = seed_set.front(); + seed_set.pop_front(); + + if (labels[i_n] == NOISE) { + // add to cluster (few lines down) + } + else if (labels[i_n] != NONE){ + continue; + } + + labels[i_n] = cluster; + centroid += points[i_n]; + n_points++; + + neighbors = RangeQuery(points, i_n, radius); + + if (neighbors.size() < min_points) { + continue; + } + else { + for (const auto &n : neighbors) { + seed_set.push_back(n); + } + } + } + + centroids.push_back(centroid/n_points); + } +} + +} +#endif diff --git a/components/operators/test/CMakeLists.txt b/components/operators/test/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..80673c7440209c27b7cf6b0cc04984648bc2bfff --- /dev/null +++ b/components/operators/test/CMakeLists.txt @@ -0,0 +1,9 @@ +### DBSCAN Unit ################################################################ +add_executable(dbscan_unit + $<TARGET_OBJECTS:CatchTest> + ./dbscan_unit.cpp +) +target_include_directories(dbscan_unit PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../include") +target_link_libraries(dbscan_unit ftlcommon) + +add_test(DBSCANUnitTest dbscan_unit) diff --git a/components/operators/test/data.hpp b/components/operators/test/data.hpp new file mode 100644 index 0000000000000000000000000000000000000000..e4d868af4f889c060dce012c8d5e91e92036685b --- /dev/null +++ b/components/operators/test/data.hpp @@ -0,0 +1,3026 @@ +#pragma once + +#include <vector> +#include <opencv2/core.hpp> + +/** + * Test data generated with sklearn.datasets (make_circles and make_moons) + * Two clusters in both. + * + * Visualization: + * https://scikit-learn.org/stable/auto_examples/cluster/plot_cluster_comparison.html + */ + +static const std::vector<cv::Vec2f> noisy_circles { + {-0.677999, -0.698757}, + {0.931437, 0.191391}, + {0.548291, -0.006017}, + {0.872837, 0.375023}, + {0.435427, -0.294726}, + {-0.536253, -0.163471}, + {0.935534, -0.069950}, + {0.159219, 0.971415}, + {-0.611547, 0.751418}, + {0.423040, -0.268125}, + {0.173147, -0.458363}, + {-0.219125, -0.398849}, + {0.096109, -0.519602}, + {-0.104486, 0.942077}, + {0.967687, -0.174183}, + {0.754242, -0.621617}, + {-0.043996, -0.531987}, + {0.430365, -0.355165}, + {-1.027807, 0.155325}, + {-0.228548, 0.382529}, + {0.071758, 0.989000}, + {0.655803, -0.812775}, + {0.758490, 0.629618}, + {-0.866656, -0.497841}, + {-0.520035, 0.072190}, + {0.394909, 0.221529}, + {-0.480141, -0.098754}, + {-0.184218, -0.921755}, + {0.101596, 0.524727}, + {-0.140615, -0.420062}, + {0.305418, -0.305836}, + {-0.850261, 0.502583}, + {-0.520933, -0.010492}, + {0.157637, 0.523338}, + {-0.434189, 0.023918}, + {0.316513, -0.394525}, + {-0.603595, -0.675230}, + {0.120921, -0.969693}, + {-0.699461, -0.700145}, + {-0.829813, 0.384497}, + {-0.450135, -0.285030}, + {0.342891, -0.455510}, + {0.531814, 0.031431}, + {0.738477, -0.657938}, + {-0.615457, 0.768498}, + {-0.378752, -0.893043}, + {-0.469287, 0.170619}, + {0.940516, -0.345081}, + {0.280564, 0.318425}, + {-0.375463, -0.387242}, + {0.513356, 0.249786}, + {-0.461774, -0.224138}, + {0.053183, -0.948771}, + {0.070808, -0.380032}, + {-0.160072, -0.895151}, + {-0.027487, -0.554549}, + {0.912894, -0.342490}, + {-0.441389, -0.890764}, + {0.454790, 0.032809}, + {-0.506644, 0.080482}, + {-0.734677, -0.666446}, + {0.860849, 0.554751}, + {-0.456707, 0.221557}, + {-0.331154, 0.969166}, + {0.035349, 0.466655}, + {-0.008867, 0.516405}, + {-0.312811, -1.016868}, + {-0.331718, -0.439313}, + {-0.753690, -0.642232}, + {-0.546627, 0.079896}, + {0.914885, 0.087661}, + {-0.946636, -0.593912}, + {0.407068, 0.108282}, + {-0.409579, 0.293544}, + {0.418979, 0.871143}, + {-0.079673, -0.959064}, + {0.022271, 0.492024}, + {-0.128445, 1.034038}, + {0.296129, 0.927400}, + {0.221448, -0.372743}, + {0.423269, -0.212434}, + {-0.924347, -0.351271}, + {-0.605629, -0.715164}, + {-0.765676, -0.728862}, + {0.338073, 0.372803}, + {-0.428441, 0.807283}, + {0.333686, -0.263154}, + {-0.524092, -0.848993}, + {-0.038609, -0.995680}, + {-0.984526, 0.046951}, + {0.210340, -0.985424}, + {0.008886, -0.996032}, + {-0.659499, 0.594582}, + {0.971926, 0.224894}, + {-0.353677, -0.235196}, + {-0.057825, -0.566347}, + {0.871634, -0.633181}, + {-0.321464, 0.931368}, + {0.984817, 0.281003}, + {0.087167, 0.529270}, + {-0.388277, 0.193739}, + {0.179648, -0.497591}, + {0.551416, 0.873007}, + {0.057045, 0.497796}, + {-0.573832, 0.033362}, + {0.074692, 0.579819}, + {-0.952958, 0.325481}, + {-0.732914, -0.528069}, + {0.248820, -0.956671}, + {-0.511009, 0.180196}, + {-0.015967, 1.037270}, + {0.961245, 0.087256}, + {0.924577, 0.380657}, + {0.694589, 0.584797}, + {-0.168396, -0.486705}, + {0.112856, 0.455664}, + {0.905957, 0.235716}, + {-0.193360, -0.380150}, + {0.428584, 0.279267}, + {-0.129808, -1.006865}, + {0.849347, 0.433455}, + {0.958172, -0.407165}, + {-0.684629, -0.698642}, + {-0.303698, -0.935910}, + {-0.605071, -0.870112}, + {-0.171775, 0.504553}, + {-0.941087, -0.363499}, + {-1.026895, -0.176613}, + {0.251774, -0.375210}, + {-0.039233, 0.508237}, + {0.598627, 0.161475}, + {0.150253, 0.467936}, + {-0.158063, 0.993672}, + {-0.174484, -0.490936}, + {0.797353, -0.570802}, + {-0.880238, 0.581656}, + {0.248483, 0.975321}, + {-0.764439, 0.640960}, + {-0.555157, 0.222931}, + {0.398577, -0.875908}, + {-0.908205, 0.407285}, + {0.539886, -0.845203}, + {0.162116, 0.440918}, + {0.481715, 0.116853}, + {-0.049455, 0.973072}, + {-1.094953, -0.026592}, + {0.081761, -0.882492}, + {-0.935893, 0.378655}, + {0.397561, -0.169954}, + {0.974016, 0.059282}, + {-0.854687, 0.659927}, + {-0.468957, -0.282842}, + {0.980104, 0.249931}, + {0.086943, 0.513643}, + {0.541957, 0.144448}, + {-0.019935, 0.411957}, + {0.495279, -0.184585}, + {-0.992969, 0.072164}, + {-0.045094, 0.469167}, + {0.909351, -0.449186}, + {-0.225598, -0.473253}, + {0.865109, -0.496427}, + {-0.227253, 0.997429}, + {-0.461060, -0.179750}, + {0.254634, -0.391796}, + {0.162349, 0.399205}, + {-0.547372, 0.199308}, + {0.432875, -0.288995}, + {-0.838898, 0.395562}, + {0.985178, 0.197549}, + {-0.866028, -0.502550}, + {0.507851, 0.173829}, + {0.380959, -0.212232}, + {-0.084691, 1.016472}, + {-0.222872, 0.397240}, + {-0.900582, -0.474540}, + {0.237292, 0.830083}, + {-0.462334, -0.958491}, + {0.294507, -0.392423}, + {0.660606, -0.680099}, + {-0.852687, 0.549440}, + {-0.307098, 0.859804}, + {0.986497, -0.286053}, + {1.072890, -0.014782}, + {0.347051, -0.952041}, + {0.792057, 0.622892}, + {0.856374, -0.659352}, + {0.716643, 0.739131}, + {-0.949822, -0.413830}, + {0.439084, 0.973049}, + {-0.901443, 0.473575}, + {-0.417679, -0.292204}, + {-0.401663, 0.230490}, + {-0.770459, -0.624693}, + {0.104649, -0.419057}, + {-0.351992, 0.925476}, + {-0.461885, 0.081054}, + {0.776156, 0.563417}, + {-0.609453, 0.776124}, + {-0.869826, 0.611030}, + {-0.936343, -0.250396}, + {0.947641, 0.195189}, + {0.172001, 0.505505}, + {0.670847, 0.722337}, + {-0.128180, 0.382630}, + {0.084943, 0.970973}, + {0.502432, 0.836911}, + {-0.765820, -0.598353}, + {0.267783, -0.953261}, + {-0.136963, 0.505817}, + {0.526329, 0.006974}, + {0.033778, -1.002287}, + {1.060646, 0.045413}, + {0.500939, -0.059420}, + {-0.440592, -0.186962}, + {-0.725037, -0.670232}, + {-0.259295, -0.395699}, + {0.356994, 0.302502}, + {0.411269, -0.865534}, + {-0.459595, 0.127022}, + {0.187557, 0.503566}, + {0.350990, 0.962713}, + {0.946578, -0.211255}, + {0.599337, -0.842506}, + {-0.186974, -1.057288}, + {-0.781941, -0.518192}, + {0.504377, -0.112438}, + {-0.424958, -0.131915}, + {-0.988047, -0.290393}, + {0.583738, 0.762403}, + {0.905616, -0.191904}, + {0.122915, -0.478367}, + {0.321184, -0.380730}, + {0.925293, -0.452892}, + {0.177570, -0.932051}, + {0.285047, 0.423628}, + {-0.506985, -0.110505}, + {0.482756, -0.083604}, + {-0.308917, 1.035905}, + {-0.486191, -0.079374}, + {-0.109448, 0.483735}, + {0.927042, 0.372615}, + {-0.227088, 0.396412}, + {0.194856, -0.431768}, + {0.807127, 0.410153}, + {-0.487039, -0.197967}, + {-0.015964, -0.483816}, + {-0.275203, -0.955066}, + {-0.322384, 0.299988}, + {-0.680302, 0.686720}, + {0.300083, -0.209034}, + {0.768799, -0.659106}, + {-0.316121, 0.841761}, + {-0.100478, 0.441617}, + {-0.317351, 0.463191}, + {-0.168533, -0.524660}, + {-0.210372, 0.910182}, + {0.380473, -0.301154}, + {1.059209, -0.238330}, + {-0.437668, 0.260651}, + {-0.918127, -0.625615}, + {0.661263, -0.592862}, + {0.208281, 0.511717}, + {-0.862470, 0.560693}, + {-0.357175, -0.253458}, + {0.419587, -0.862857}, + {0.075456, -0.499759}, + {-0.112886, 0.495239}, + {-0.947117, 0.115546}, + {-0.386086, -0.093426}, + {0.397381, -0.358283}, + {0.586201, -0.039841}, + {0.373323, -0.211077}, + {0.523411, -0.313837}, + {-0.302930, 0.392802}, + {-0.373475, -0.972741}, + {-0.535744, -0.111344}, + {0.030460, 0.952755}, + {-0.833726, 0.623528}, + {0.330402, -0.415524}, + {0.198183, -0.417874}, + {0.419158, -0.220807}, + {0.243254, -0.480818}, + {-0.164164, 0.447863}, + {-0.356430, 0.316113}, + {0.960673, -0.532562}, + {-0.217009, 0.399249}, + {-0.182977, -0.968204}, + {-0.486861, 0.001070}, + {-0.998201, 0.285770}, + {-0.258566, -0.348945}, + {1.001401, -0.083753}, + {0.899496, 0.399639}, + {-0.029120, -1.011456}, + {-0.510889, -0.033808}, + {-0.236222, 1.014309}, + {-0.025134, 0.500611}, + {-0.177920, 0.445065}, + {0.458141, -0.109140}, + {-0.764946, -0.621198}, + {0.486058, -0.860182}, + {0.727380, -0.663891}, + {-0.896435, 0.431432}, + {0.353965, 0.906513}, + {0.494337, -0.865661}, + {-0.677504, -0.798777}, + {0.981943, 0.348849}, + {-0.417313, 0.230326}, + {-0.534694, 0.085594}, + {-1.036211, 0.138269}, + {0.470304, 0.116420}, + {-0.758203, -0.634538}, + {0.298848, 0.459691}, + {0.866894, -0.494182}, + {-0.887719, -0.376569}, + {-0.462029, -0.263352}, + {0.098598, 0.485244}, + {-0.420278, -0.214920}, + {0.946167, 0.515926}, + {-0.341843, 0.925878}, + {-0.867367, 0.397898}, + {0.402215, 0.293868}, + {-0.512864, -0.231789}, + {0.547200, -0.109036}, + {0.906324, 0.490822}, + {-0.109815, 0.497706}, + {-0.088632, -1.021199}, + {-0.290762, -0.932944}, + {-0.394197, 0.256479}, + {-0.287780, 0.253140}, + {-1.011401, -0.038588}, + {0.360575, 0.294392}, + {-0.297505, -0.231839}, + {0.864790, 0.276511}, + {-0.660445, 0.812650}, + {-0.193294, 0.544461}, + {0.406888, -0.296968}, + {0.605198, 0.862784}, + {0.216620, -0.431742}, + {-0.519715, 0.175320}, + {-0.836740, -0.527318}, + {0.544606, 0.854625}, + {-0.075076, 1.107216}, + {-0.355730, 0.390136}, + {0.178468, -0.516520}, + {-0.414952, 0.230035}, + {-0.400819, 0.301432}, + {0.047976, -0.430378}, + {0.045276, -0.968817}, + {0.173568, -0.500156}, + {0.412780, 0.205282}, + {-0.179633, -0.530022}, + {-0.492470, -0.942870}, + {-0.842717, 0.046667}, + {0.253652, -0.423416}, + {-0.175362, -0.491158}, + {-0.251316, -0.452699}, + {0.347521, -0.337458}, + {-0.428995, -0.840094}, + {0.455201, 0.287714}, + {0.226316, -0.935593}, + {0.834339, 0.359791}, + {-0.051508, -0.432374}, + {-0.151291, -0.915885}, + {0.746569, 0.736690}, + {0.254548, 0.416879}, + {-0.446322, -0.292015}, + {-0.145351, -0.490869}, + {0.896341, 0.382621}, + {-0.299118, 0.359764}, + {0.783893, 0.606463}, + {-0.605867, -0.777543}, + {0.104327, -0.497191}, + {1.010678, -0.084427}, + {0.134126, -0.483766}, + {-0.432429, 0.846934}, + {0.814122, -0.561370}, + {0.953933, -0.213570}, + {0.220573, -0.982055}, + {0.012950, 0.994213}, + {0.211678, 0.947325}, + {0.183041, -0.410490}, + {-0.841034, 0.397786}, + {0.974489, 0.088833}, + {-0.183430, -0.928581}, + {0.306613, -0.350987}, + {-0.622288, -0.834056}, + {0.019717, -1.008886}, + {-0.476608, -0.078728}, + {-0.979637, -0.093796}, + {0.218740, 0.481157}, + {-0.352026, -0.354291}, + {0.317821, -0.236924}, + {0.419291, 0.326369}, + {-0.549357, 0.053576}, + {0.508234, -0.296205}, + {0.725601, -0.751717}, + {-0.088771, -0.456016}, + {1.046336, 0.000276}, + {-0.215564, 0.455457}, + {-0.508651, 0.056324}, + {0.510434, -0.888738}, + {0.117664, 0.525736}, + {-0.380721, 0.227415}, + {0.478517, -0.122766}, + {-0.424344, 0.233289}, + {0.454687, -0.876208}, + {-0.441405, 0.146215}, + {0.163840, 0.382482}, + {0.569654, 0.085293}, + {-0.986534, -0.478661}, + {-0.387836, -0.916126}, + {-0.127072, 0.426384}, + {-0.199391, -0.526146}, + {-1.035742, -0.196234}, + {-0.051233, -0.465139}, + {-0.428369, -0.047364}, + {-0.476371, -0.138416}, + {0.426817, 0.215754}, + {0.495331, 0.191533}, + {0.415164, -0.263429}, + {0.838259, -0.494880}, + {0.750893, -0.689373}, + {-0.495794, -0.109527}, + {0.234781, 0.427291}, + {0.155417, -0.399608}, + {0.566996, -0.760463}, + {-0.507943, 0.806253}, + {1.000322, -0.297023}, + {0.835510, -0.638754}, + {0.437386, 0.350652}, + {-0.776158, -0.490757}, + {0.347571, 0.509521}, + {-0.477439, 0.861656}, + {-0.971329, -0.370001}, + {-0.400733, -0.190103}, + {-0.545942, 0.905461}, + {-0.433641, 0.166344}, + {0.073579, -0.504871}, + {-0.603776, -0.867520}, + {0.208232, -0.473395}, + {-0.877820, -0.402422}, + {-0.417911, -0.364646}, + {0.417578, -0.186013}, + {-0.295229, 0.385251}, + {0.048779, -0.436437}, + {-0.379831, -0.251605}, + {-0.049125, -0.601650}, + {-0.421046, -0.131185}, + {-0.037624, 0.385958}, + {-0.301450, -0.845250}, + {-0.322129, 0.373384}, + {-0.017798, -0.996371}, + {0.602488, -0.794054}, + {0.695779, -0.742608}, + {-0.410989, 0.360557}, + {-0.079627, 0.584187}, + {0.479044, -0.180925}, + {-0.985729, -0.388357}, + {-0.019055, 0.964549}, + {-0.399048, 0.911348}, + {-0.007990, -0.410155}, + {0.064184, -0.515430}, + {0.448937, -0.223400}, + {-0.490115, 0.138612}, + {0.243716, 0.462987}, + {0.859155, 0.444468}, + {0.202435, -0.499262}, + {0.008052, -0.515216}, + {0.656704, -0.730802}, + {0.409827, 0.298936}, + {-0.046320, 0.441092}, + {0.446148, 0.022525}, + {0.133035, -0.973219}, + {0.747157, 0.652588}, + {-0.767683, -0.669115}, + {-0.427130, -0.249255}, + {-0.447851, 0.161126}, + {0.902155, 0.358619}, + {-0.262299, -0.378197}, + {-0.382379, 0.753528}, + {0.470632, -0.157226}, + {-0.734169, 0.627161}, + {0.923239, -0.476153}, + {0.870001, -0.471650}, + {-0.651064, 0.704730}, + {0.020101, 0.434650}, + {-0.070438, -0.978500}, + {-0.984267, -0.157078}, + {-0.673376, 0.755563}, + {-0.413699, 0.159980}, + {-0.526451, -0.756120}, + {0.577600, -0.067938}, + {-0.541985, -0.013614}, + {0.648841, -0.753135}, + {-0.707874, 0.714192}, + {-0.399472, 0.375041}, + {0.303638, 0.409792}, + {-0.988832, -0.119125}, + {-0.662159, 0.764752}, + {-0.974710, -0.334435}, + {-0.059847, -0.547556}, + {-0.926454, 0.237144}, + {-0.714904, -0.642235}, + {-1.061997, 0.144262}, + {0.499472, -0.093872}, + {0.436698, 0.456442}, + {-0.145575, -1.015787}, + {-0.833639, 0.415878}, + {-0.538611, -0.130033}, + {-0.047882, 0.988187}, + {0.547303, 0.059564}, + {-0.152244, 0.482598}, + {0.883323, 0.551497}, + {-0.525826, -0.899296}, + {0.940643, 0.079329}, + {0.159549, 0.471706}, + {-0.431122, -0.869813}, + {-0.420376, -0.284674}, + {0.964114, -0.316045}, + {0.090721, -0.510467}, + {0.846677, 0.421471}, + {-0.323696, 0.388932}, + {0.360118, -0.342293}, + {-0.906269, -0.332858}, + {-0.172270, -1.003398}, + {-0.112386, 1.012097}, + {-0.896784, 0.373224}, + {-0.590284, -0.778550}, + {0.344965, 0.363182}, + {-0.159235, -0.389218}, + {-0.310178, -0.937732}, + {0.463532, -0.206673}, + {-1.018857, -0.336616}, + {0.408806, -0.958345}, + {-0.310498, 0.345931}, + {0.280534, -0.966998}, + {-0.091346, -1.035662}, + {0.446762, 0.183808}, + {-0.680360, -0.779284}, + {-0.360954, -0.363679}, + {0.447993, 0.825974}, + {1.035206, 0.125413}, + {-0.504644, 0.190076}, + {0.272663, -0.291740}, + {-0.679006, -0.716972}, + {-0.007885, -1.023776}, + {-0.264651, 0.328191}, + {0.477003, 0.287399}, + {-0.301861, -0.394858}, + {0.702429, 0.728898}, + {0.822623, 0.486387}, + {-0.551961, -0.016652}, + {-0.054259, 0.506987}, + {-0.987546, -0.179947}, + {0.175134, 0.892756}, + {-0.330313, 0.372251}, + {0.174161, -0.529993}, + {-0.996708, 0.234108}, + {-0.006552, 1.115930}, + {-0.481870, -0.177124}, + {-1.037933, 0.089382}, + {0.649831, 0.885337}, + {0.744833, -0.413087}, + {-0.488744, 0.812116}, + {-0.136410, 0.569903}, + {-0.902982, 0.431387}, + {-0.090668, 0.423669}, + {-1.032578, -0.110512}, + {-1.066994, 0.210198}, + {-0.633369, 0.805055}, + {-0.945786, 0.142619}, + {-0.471333, -0.166392}, + {-0.439499, 0.337179}, + {0.293864, -0.372854}, + {0.933753, -0.247618}, + {0.438968, -0.344030}, + {1.025843, 0.083377}, + {0.848692, 0.409470}, + {0.385671, -0.312714}, + {-0.353101, -0.505543}, + {0.500672, 0.207075}, + {-0.992601, 0.094303}, + {0.481475, 0.167595}, + {0.536283, -0.134784}, + {0.196846, -0.467952}, + {0.935402, -0.133775}, + {0.750427, -0.669785}, + {0.699906, 0.707980}, + {-0.369993, -0.414249}, + {0.024423, -0.480681}, + {-0.040300, 1.005000}, + {0.082553, 1.020216}, + {0.082123, -0.496301}, + {0.453136, -0.225144}, + {0.921309, -0.304055}, + {0.413877, 0.208432}, + {-0.201807, -0.975618}, + {0.994212, -0.090429}, + {0.794808, 0.610930}, + {-0.481421, 0.123685}, + {-0.916295, -0.248705}, + {-0.720330, 0.821486}, + {0.218266, -0.962246}, + {-0.880411, -0.105727}, + {0.061270, -0.464201}, + {0.459177, 0.925891}, + {-0.653836, 0.805294}, + {0.467594, 0.137074}, + {-0.276385, -0.395558}, + {0.734202, 0.722302}, + {0.375361, 0.189260}, + {0.193504, -0.353737}, + {-0.104672, 0.429293}, + {-0.532233, -0.278900}, + {0.522314, 0.003217}, + {-0.753675, 0.663684}, + {-0.637161, 0.801987}, + {0.473039, -0.128132}, + {0.892201, -0.510702}, + {-0.220471, -0.451811}, + {0.520514, -0.090235}, + {-0.802982, -0.344827}, + {0.083527, 0.467431}, + {-0.958861, 0.135801}, + {0.359597, -0.898957}, + {-0.478897, 0.969480}, + {0.083039, -0.494771}, + {0.971487, -0.324155}, + {-0.152730, -0.554838}, + {-0.111315, 0.523428}, + {-0.429918, 0.334627}, + {0.426713, 0.199641}, + {-0.945873, -0.015962}, + {-0.618717, -0.577649}, + {0.665114, 0.811857}, + {-0.370519, -0.430923}, + {-0.176774, -0.462536}, + {0.795572, -0.468388}, + {-0.456108, -0.196354}, + {-0.468823, -0.927027}, + {0.698177, -0.717687}, + {-0.483736, 0.062662}, + {-0.075897, -0.515180}, + {0.250325, 0.378778}, + {0.074739, 0.568741}, + {-0.970513, 0.072880}, + {0.511300, -0.015676}, + {-1.014409, -0.123089}, + {-0.179697, 1.044341}, + {0.886630, 0.497947}, + {-0.323735, -0.465294}, + {0.386387, 0.369443}, + {-0.670069, 0.730704}, + {-0.055726, -0.484028}, + {0.496090, 0.073803}, + {-0.461010, -0.114447}, + {-0.385740, 0.377162}, + {0.462717, 0.211399}, + {-0.217345, -0.912625}, + {-0.722023, -0.762705}, + {-0.465836, -0.210400}, + {-0.155215, -0.449592}, + {0.183616, -0.372897}, + {-0.336088, -0.479256}, + {0.043281, 1.047885}, + {0.485354, 0.051776}, + {1.014635, -0.009731}, + {0.011073, -0.550879}, + {-0.916356, 0.510771}, + {-0.221729, 1.033860}, + {-0.083329, 0.511366}, + {0.173632, -0.380025}, + {-0.083335, 0.510564}, + {-0.255195, 0.507867}, + {-0.257340, -0.992995}, + {-0.534572, 0.904511}, + {0.959089, 0.332995}, + {0.710885, -0.668363}, + {-0.457090, -0.119187}, + {-0.371356, 0.843448}, + {0.176817, 0.509167}, + {-0.125945, 0.481280}, + {-0.210094, 0.479303}, + {0.025689, -0.471464}, + {-0.138035, 0.420077}, + {-0.555670, 0.801908}, + {0.682827, 0.730237}, + {0.940400, 0.164225}, + {0.422610, -0.140270}, + {0.258934, 0.403768}, + {0.392850, 0.308711}, + {-0.353735, 0.337216}, + {0.241158, 0.403967}, + {0.486632, -0.203836}, + {-0.040170, -0.976753}, + {-0.277386, 0.329737}, + {-0.451354, -0.186307}, + {-0.334577, -0.985400}, + {0.542603, -0.892565}, + {-0.567149, -0.784833}, + {0.428929, -0.248270}, + {-0.296177, 0.442089}, + {0.976838, -0.136481}, + {0.493476, 0.085780}, + {0.468365, -0.081299}, + {-0.530080, 0.075962}, + {-0.920270, 0.015242}, + {0.010270, 0.422162}, + {-0.299807, 0.859005}, + {-0.974349, -0.338235}, + {-0.139248, 0.940724}, + {0.721951, 0.578520}, + {-0.064088, 1.036968}, + {-0.579669, -0.800171}, + {0.428870, 0.165491}, + {0.354812, 1.071620}, + {0.400755, 0.106264}, + {-0.898130, 0.482274}, + {-0.304259, -0.369392}, + {0.220212, 0.323096}, + {-0.781949, -0.623955}, + {0.367734, 0.876235}, + {-0.253624, -0.411581}, + {-0.357577, -0.178154}, + {-0.372693, -0.198908}, + {-0.406149, 0.355235}, + {-0.153364, -0.539393}, + {1.017186, -0.062682}, + {0.344752, -1.036994}, + {0.308680, 0.384987}, + {-0.089193, -0.509445}, + {0.768380, 0.636211}, + {0.291620, 1.075851}, + {-0.513505, 0.148544}, + {-0.495245, -0.205787}, + {-0.358480, -0.354498}, + {0.446033, 0.929607}, + {-0.463365, 0.176340}, + {0.525789, 0.047947}, + {-0.957993, -0.154614}, + {0.349895, 0.850708}, + {-0.083150, 0.468088}, + {-0.902392, -0.379334}, + {-0.284484, 0.252711}, + {0.008046, 0.491875}, + {-1.069040, -0.235484}, + {0.541315, 0.070689}, + {0.401161, -0.320203}, + {0.245583, 0.542472}, + {0.041052, 0.518707}, + {-0.899949, 0.165900}, + {0.674320, 0.786183}, + {0.495284, -0.815471}, + {0.127167, -0.951990}, + {1.006253, 0.305377}, + {-0.660674, -0.778331}, + {0.331870, 0.928536}, + {0.306922, -0.485999}, + {0.280189, 0.943400}, + {-0.055382, -1.077626}, + {0.241309, 0.475105}, + {0.094016, 0.573092}, + {-0.394661, -0.896598}, + {-0.427261, 0.169856}, + {-0.275674, -0.471098}, + {-0.402323, 0.915196}, + {-0.279216, 0.462328}, + {-0.413871, 0.920625}, + {0.048175, -0.470363}, + {-0.562606, -0.035914}, + {-0.320784, 0.453396}, + {0.731346, -0.770326}, + {0.265057, -1.069975}, + {0.099509, 0.501058}, + {-0.501528, -0.195086}, + {0.809791, 0.513727}, + {0.335598, -0.427183}, + {0.053389, 0.953207}, + {-0.319600, 0.920113}, + {0.001808, 0.911417}, + {-0.369341, -0.383086}, + {-0.119685, 0.474282}, + {-0.187143, 0.474779}, + {-0.325911, -1.025640}, + {0.865542, -0.618799}, + {0.090815, 0.419351}, + {-0.369454, 0.294803}, + {-0.482744, 0.221822}, + {0.445478, 0.125008}, + {-0.966671, -0.026235}, + {-0.173210, -0.453061}, + {0.302727, -0.503564}, + {-0.970381, 0.344969}, + {0.318373, 0.398460}, + {-0.557221, 0.844919}, + {0.983052, -0.000581}, + {-0.551473, 0.912465}, + {0.515336, 0.054156}, + {0.928301, 0.361197}, + {0.496398, -0.063496}, + {-0.077390, -1.016462}, + {0.525593, 0.879311}, + {0.581996, 0.123192}, + {0.627640, -0.678406}, + {-0.345232, 0.331676}, + {0.899028, -0.373113}, + {0.702078, 0.673463}, + {-0.521317, 0.060243}, + {-0.601738, -0.803358}, + {0.398823, -0.085422}, + {0.032989, 0.474670}, + {0.800714, -0.591061}, + {0.986086, 0.165684}, + {-0.388703, 0.894500}, + {1.032332, 0.449815}, + {0.192942, 0.867326}, + {-0.771062, -0.519478}, + {1.005554, -0.117033}, + {0.461506, 0.288624}, + {-0.154530, -0.544829}, + {-0.486015, 0.118645}, + {0.376450, 0.309615}, + {-0.806289, 0.630394}, + {-0.319940, 0.411189}, + {0.051525, 1.040204}, + {0.950788, -0.421353}, + {0.701025, -0.743509}, + {0.112522, -0.535038}, + {-0.759595, 0.698365}, + {0.491356, -0.121127}, + {-0.127813, -0.417265}, + {0.514028, 0.048678}, + {-0.035365, -0.488239}, + {-0.305626, -0.487870}, + {-0.051946, 0.474658}, + {0.744777, -0.663359}, + {0.299279, -0.377281}, + {0.550034, 0.198919}, + {-0.166453, 0.913321}, + {-1.021316, 0.299421}, + {-0.827893, 0.606640}, + {-0.187675, 0.969991}, + {0.449252, -0.085263}, + {-0.767316, 0.634944}, + {-1.024035, -0.060637}, + {0.168887, 0.941176}, + {-0.897486, -0.361963}, + {-0.332873, 0.966020}, + {0.392346, -0.897803}, + {1.044408, 0.227324}, + {-0.367036, -0.838350}, + {-0.504571, 0.032648}, + {0.780275, 0.532232}, + {0.679892, 0.708961}, + {-0.439129, -0.124304}, + {-0.956624, -0.122037}, + {0.354346, 0.379391}, + {1.030654, -0.035462}, + {-1.006929, 0.022802}, + {-0.518946, 0.771745}, + {-0.219357, -0.371995}, + {-0.194638, 0.431672}, + {-0.805356, 0.600714}, + {0.050899, -0.462852}, + {0.432222, -0.317450}, + {-0.988473, -0.345247}, + {0.461139, -0.209826}, + {0.061760, 0.481055}, + {0.984321, 0.331883}, + {-0.192602, 0.996800}, + {-0.221280, -0.940994}, + {0.219954, -0.490378}, + {-0.604191, -0.877882}, + {0.238072, -0.935167}, + {0.700646, 0.642798}, + {-0.448660, -0.875638}, + {-0.679051, 0.704965}, + {-0.323195, -0.334981}, + {0.290347, 0.329250}, + {0.802618, 0.552108}, + {0.035006, -0.933954}, + {0.094873, 1.014236}, + {-0.461481, 0.032805}, + {0.374549, -0.395426}, + {-0.497669, -0.866975}, + {0.564980, 0.771422}, + {-0.755256, 0.591953}, + {0.853036, 0.620307}, + {0.881031, 0.368812}, + {-0.519580, 0.063204}, + {0.516245, 0.100368}, + {0.450105, 0.087523}, + {-0.208434, -0.373102}, + {-0.311449, 0.278894}, + {0.403683, -0.356229}, + {-0.973684, 0.398929}, + {0.201784, -1.004757}, + {0.558343, -0.740753}, + {0.034402, -0.950940}, + {0.245965, 0.440794}, + {0.355503, -0.430036}, + {0.553435, -0.246366}, + {-0.991333, -0.317265}, + {0.642115, -0.854216}, + {0.550148, 0.024761}, + {0.451398, -0.191057}, + {-0.208500, -0.514551}, + {-0.722274, 0.709757}, + {0.089467, -0.505752}, + {0.320688, 0.183011}, + {0.496722, -0.891702}, + {-0.372067, -0.909623}, + {0.241996, 1.051972}, + {-0.958143, 0.275267}, + {0.370231, -0.298906}, + {-0.597011, -0.848203}, + {0.931080, 0.414752}, + {1.010477, -0.086310}, + {0.487209, 0.864507}, + {0.555038, 0.054017}, + {-0.704031, -0.667664}, + {-0.154694, -0.474038}, + {0.133300, 0.494701}, + {0.090005, -0.476426}, + {-0.019342, 0.399014}, + {-0.869800, -0.489999}, + {0.035840, 1.031111}, + {0.018195, -0.985033}, + {-0.299542, -0.310752}, + {-0.899981, -0.395739}, + {-0.899360, 0.402692}, + {0.585884, -0.779693}, + {0.809335, -0.638818}, + {-0.974411, 0.258079}, + {-0.721276, -0.608132}, + {-0.184171, 0.384248}, + {1.066470, 0.177712}, + {0.132497, 0.506993}, + {-0.457500, 0.056175}, + {-0.470025, 0.082220}, + {0.435519, -0.092114}, + {0.301192, -0.468054}, + {-0.378981, 0.312109}, + {0.363742, -0.411328}, + {-1.008506, 0.203303}, + {-0.738627, -0.745201}, + {-0.899889, 0.537853}, + {0.451594, 0.087341}, + {0.028924, -0.527891}, + {-0.835159, -0.554372}, + {0.134479, 0.926280}, + {0.948206, -0.445523}, + {0.474911, -0.056195}, + {0.511050, 0.918605}, + {0.460029, 0.299129}, + {-0.178995, -0.395847}, + {-0.413853, -0.332490}, + {0.429056, 0.315831}, + {0.744840, 0.635992}, + {0.009672, 0.490753}, + {-0.370538, -0.237352}, + {-1.003524, 0.295700}, + {-0.929624, -0.184736}, + {-0.314313, -0.366878}, + {-1.014434, -0.121328}, + {-0.989514, -0.080057}, + {0.225726, 0.533268}, + {-0.028389, -0.531210}, + {0.596054, 0.875477}, + {-0.231779, -0.522481}, + {-0.481723, -0.038715}, + {-0.252789, 1.029409}, + {-0.097026, -0.428761}, + {0.944188, 0.195783}, + {-0.312067, -0.290475}, + {0.533306, 0.040163}, + {-1.064723, -0.110085}, + {-0.540323, 0.805300}, + {-0.453397, 0.841064}, + {-0.522874, 0.117572}, + {0.909542, 0.319463}, + {0.233413, -0.948346}, + {0.735792, -0.565654}, + {-0.426096, -0.860008}, + {0.306204, -0.376464}, + {0.513797, -0.080315}, + {-0.567029, 0.050771}, + {-0.357161, 0.433139}, + {-0.367562, -0.336762}, + {0.612312, 0.832645}, + {-0.332439, 0.381784}, + {-0.954311, -0.024405}, + {0.216949, 0.519744}, + {0.488314, -0.871016}, + {-0.245132, 0.410721}, + {0.351714, -0.924785}, + {-0.031865, -0.433848}, + {-0.365679, 0.446656}, + {0.478104, -0.866874}, + {0.455618, 0.247756}, + {0.169163, 0.419925}, + {0.840899, -0.674092}, + {0.221998, -1.013374}, + {-0.392459, 0.340925}, + {1.028387, -0.204017}, + {0.131400, 0.948342}, + {0.939001, -0.675875}, + {-0.460551, 0.884335}, + {0.876336, -0.446613}, + {-0.419194, 0.009156}, + {-0.369248, 0.247624}, + {-0.305214, -0.466132}, + {0.266818, 0.474927}, + {0.953633, -0.318703}, + {0.482722, -0.107249}, + {-0.904048, 0.507719}, + {0.439848, 0.907631}, + {0.084049, -0.529169}, + {0.237457, 0.995416}, + {-0.173878, -0.395430}, + {0.450156, -0.958853}, + {0.336825, 0.991952}, + {0.460242, 0.869154}, + {-0.333714, 0.428898}, + {0.366839, 0.321966}, + {0.391169, 0.104227}, + {0.447770, -1.028608}, + {0.540066, -0.119012}, + {-0.243343, -0.398468}, + {-0.917746, -0.338820}, + {0.721882, 0.753841}, + {1.001621, -0.088740}, + {-0.984483, 0.264624}, + {-0.360019, -0.382035}, + {0.405406, 0.317800}, + {0.406108, 0.319288}, + {0.473152, 0.028579}, + {-0.074484, 0.556967}, + {0.010953, -0.566084}, + {0.393257, -0.414675}, + {0.407159, -0.223823}, + {-0.417633, 0.189307}, + {0.678347, -0.728900}, + {0.577653, 0.773425}, + {0.466233, 0.230573}, + {-0.163636, 0.487134}, + {0.370502, -0.277420}, + {-0.740525, -0.636081}, + {-0.433690, 0.296692}, + {0.202976, -0.938022}, + {-0.415849, 0.220315}, + {-0.449295, 0.203081}, + {-0.495797, -0.817518}, + {0.874216, -0.377343}, + {-0.983755, -0.015402}, + {-0.124427, 0.601232}, + {-0.485739, -0.245096}, + {-0.878236, -0.182226}, + {-0.881333, -0.318121}, + {-0.390600, -0.350182}, + {0.081729, 0.996557}, + {0.891666, -0.478845}, + {0.365114, 0.226572}, + {-0.881245, -0.513695}, + {0.508938, -0.062032}, + {-0.101059, -0.463196}, + {1.010469, -0.165137}, + {-0.607886, 0.667311}, + {-0.464874, 0.107424}, + {-0.531313, 0.003952}, + {0.595537, -0.764054}, + {0.942425, -0.125652}, + {-0.648483, -0.918233}, + {0.916670, -0.556077}, + {0.992609, 0.002324}, + {-0.046385, 0.556241}, + {-0.476001, -0.206958}, + {-0.454945, -0.227882}, + {-0.983195, 0.413575}, + {0.583945, 0.884536}, + {-0.190500, 0.906293}, + {0.330712, 0.300851}, + {-0.495760, 0.988711}, + {0.543964, -0.059297}, + {-0.358287, -0.264572}, + {0.223275, -0.534666}, + {-0.541845, -0.122202}, + {-0.125065, -0.433062}, + {-1.016218, 0.029935}, + {-0.504339, 0.866565}, + {0.950125, -0.121832}, + {0.980363, 0.267497}, + {0.394181, 0.391181}, + {0.230903, -0.407107}, + {0.849827, -0.484925}, + {-0.536631, -0.184924}, + {0.984419, 0.065796}, + {0.461853, 0.934906}, + {0.416901, 0.334080}, + {-0.946590, 0.205127}, + {-0.741713, 0.615476}, + {0.926394, -0.376759}, + {-0.284763, 0.318066}, + {-0.080446, -0.463094}, + {-0.992389, 0.046124}, + {-0.276708, -0.440953}, + {-0.332416, 0.924615}, + {-0.945089, 0.287879}, + {-0.103122, -0.462234}, + {0.311354, -1.044021}, + {-0.771181, -0.637471}, + {0.770971, 0.518756}, + {-0.086222, 0.427731}, + {-0.466227, 0.872673}, + {0.690939, -0.785689}, + {0.548732, 0.800597}, + {0.444045, -0.086904}, + {0.391039, -0.378106}, + {0.142521, -0.958676}, + {0.510387, 0.929678}, + {-0.284864, 0.497143}, + {-0.408416, -0.285712}, + {0.281564, 0.351807}, + {0.992714, -0.332831}, + {0.454432, 0.869861}, + {-0.258281, 0.304245}, + {-0.325406, -0.344919}, + {0.984775, 0.074724}, + {-0.477904, -0.909029}, + {0.320254, 0.409001}, + {-0.042222, 0.379767}, + {0.614195, -0.827724}, + {0.040221, 0.326742}, + {-0.274337, -0.345170}, + {-1.003709, -0.250561}, + {0.474003, -0.110149}, + {-1.077146, 0.193423}, + {0.327366, 0.945689}, + {-1.027258, 0.302112}, + {-0.897435, 0.588509}, + {0.106834, -0.419810}, + {0.357477, -0.950413}, + {-0.460222, -0.307745}, + {-0.659331, 0.726169}, + {-0.125560, -0.463263}, + {0.445107, -0.157654}, + {-0.568031, 0.195085}, + {-1.014986, -0.235421}, + {-0.701418, -0.750731}, + {-0.405717, -0.894773}, + {-0.179560, -1.004727}, + {-0.220206, 0.435017}, + {0.053922, 0.467573}, + {-0.348787, -0.169544}, + {-0.053541, -1.082162}, + {0.116742, -0.524175}, + {-0.353468, -0.342156}, + {-0.542439, -0.043689}, + {-0.026337, 0.517938}, + {0.217994, 0.920258}, + {-0.981648, 0.315322}, + {0.905878, 0.451923}, + {-0.464861, 0.070224}, + {0.360896, -0.342396}, + {0.418600, -0.258813}, + {-0.806425, -0.662186}, + {0.271735, 0.433591}, + {-0.422813, -0.256724}, + {0.109504, -0.457610}, + {0.149350, -0.490384}, + {-0.899182, -0.470314}, + {0.467307, 0.061304}, + {0.243285, 0.333500}, + {0.307520, -0.408844}, + {0.428611, 0.307305}, + {-0.338755, 0.382677}, + {0.276947, -0.921600}, + {-0.019245, 0.497374}, + {-0.954131, 0.217698}, + {-0.344901, -0.445352}, + {-0.292174, 0.309940}, + {-0.494543, -0.073494}, + {-0.728477, -0.650504}, + {-0.514548, -0.089884}, + {0.360816, -0.407978}, + {0.739496, -0.685008}, + {0.067760, -0.934016}, + {0.576356, -0.810586}, + {0.321006, -0.972535}, + {0.213011, 0.388703}, + {-0.745160, -0.618341}, + {0.491501, 0.118117}, + {-0.796973, 0.595279}, + {-0.045844, 0.468815}, + {1.001157, -0.178135}, + {0.942886, -0.351557}, + {0.331833, 0.330623}, + {-0.141553, 0.556938}, + {-0.477403, -0.161101}, + {-0.369510, 0.244190}, + {0.242561, -0.577656}, + {-0.733119, -0.587480}, + {0.178210, -0.981741}, + {0.348704, 0.935786}, + {0.252215, 0.975301}, + {-0.493787, 0.037428}, + {0.550540, -0.100111}, + {-0.504781, 0.079933}, + {0.273486, 0.333708}, + {-0.149994, 0.388655}, + {-0.247735, -0.549131}, + {0.455940, -0.903726}, + {0.358295, -0.932358}, + {0.224732, 0.964639}, + {0.538466, 0.730261}, + {-0.343736, 0.279659}, + {0.444942, -0.916538}, + {-0.231686, -0.422261}, + {-0.978419, 0.325287}, + {-0.655643, -0.810852}, + {-0.426042, -0.878073}, + {0.291281, -0.381267}, + {-0.135738, -0.494186}, + {0.705822, 0.736291}, + {0.516533, 0.269974}, + {-0.767511, -0.425239}, + {-0.523601, 0.092158}, + {1.000695, 0.314966}, + {0.301603, 0.421054}, + {-0.008160, -0.544579}, + {-0.064308, 0.450383}, + {0.858791, -0.231316}, + {0.487322, -0.232450}, + {0.440480, -0.251661}, + {0.476227, 0.068865}, + {0.226160, 0.439081}, + {-0.026710, -0.946614}, + {0.329355, -0.260583}, + {0.800360, 0.561859}, + {-0.390560, -0.889959}, + {-0.506943, -0.883699}, + {-1.034389, 0.287685}, + {-0.342719, 0.977152}, + {0.355106, 0.932132}, + {-0.397898, 0.188358}, + {-0.530487, -0.137700}, + {0.524106, 0.239887}, + {-0.472427, -0.856932}, + {0.110046, -0.521439}, + {0.152209, 1.061592}, + {0.492374, 0.239054}, + {0.142710, 0.904405}, + {0.002087, -0.534016}, + {0.238633, -0.348559}, + {0.462593, 0.925018}, + {-0.012578, 0.957160}, + {0.454616, 0.864379}, + {0.268653, -0.377859}, + {0.190130, 0.478896}, + {-0.123566, 0.960644}, + {-0.792596, 0.669592}, + {0.965816, 0.288679}, + {0.437699, 0.097823}, + {-0.412824, 0.959961}, + {0.576257, -0.740743}, + {1.068025, 0.267385}, + {-0.577311, 0.120711}, + {0.407283, -0.212444}, + {-0.397210, 0.234002}, + {0.252226, 0.526789}, + {-0.874150, 0.339354}, + {-0.413585, 0.091574}, + {-0.062437, 0.982064}, + {-0.935365, -0.476033}, + {0.533594, -0.055220}, + {0.345678, 0.443038}, + {0.928102, -0.202280}, + {0.096503, 0.603694}, + {-0.795526, 0.657247}, + {0.828283, 0.561331}, + {0.376683, 0.194640}, + {-0.177283, -0.986708}, + {-0.040941, 0.470609}, + {0.276590, -0.442912}, + {0.271131, -0.456701}, + {0.254383, -0.453384}, + {0.416401, 0.342874}, + {0.730008, -0.714453}, + {-0.290483, -0.378248}, + {0.224182, -0.526300}, + {0.468004, -0.850300}, + {-0.475102, -0.201755}, + {-0.150610, 0.964198}, + {-0.374576, 0.296889}, + {0.326127, -0.403445}, + {0.293239, -0.358646}, + {0.977400, -0.246636}, + {0.839435, -0.390965}, + {-0.312602, 0.329096}, + {0.396110, -0.188653}, + {-0.345810, 0.979769}, + {-0.235239, 0.424713}, + {-0.121138, 0.492547}, + {0.920001, 0.579908}, + {0.956540, 0.190687}, + {-0.274876, 0.989650}, + {0.437722, 0.243599}, + {0.991046, -0.119906}, + {-0.456911, -0.106230}, + {0.585620, 0.828932}, + {0.153801, 0.928593}, + {0.462057, -0.290546}, + {-0.217044, 0.990277}, + {-0.584347, 0.694665}, + {0.936432, 0.387643}, + {0.189225, -0.933064}, + {0.077744, -0.555827}, + {-0.366123, -0.922218}, + {-0.761475, 0.704149}, + {-0.699725, -0.734398}, + {0.439303, 0.819247}, + {0.557673, -0.079411}, + {-0.265055, -0.604687}, + {0.045423, 0.485691}, + {0.871393, -0.597538}, + {-0.578653, -0.051956}, + {0.210804, 0.400319}, + {-0.005140, 0.587265}, + {1.021576, 0.175319}, + {-0.493216, 0.058602}, + {0.391830, 1.011464}, + {0.112199, 0.505886}, + {-0.494688, -0.166269}, + {0.879432, -0.408510}, + {0.328677, 0.401118}, + {0.239682, 0.419771}, + {0.219065, -0.935714}, + {-0.325962, 0.335467}, + {0.410568, 0.903644}, + {0.954673, -0.031991}, + {-0.165429, -0.445167}, + {-0.308758, 0.506077}, + {-0.949142, 0.410075}, + {0.025179, 1.086534}, + {-0.282731, -0.401589}, + {-0.751915, -0.540239}, + {0.401528, -0.954622}, + {-0.325838, 0.320585}, + {-0.789071, 0.652788}, + {-0.067263, -0.415211}, + {-0.342763, -0.500473}, + {0.614655, 0.772828}, + {0.193913, -0.416394}, + {0.598747, -0.897963}, + {0.017949, -0.549917}, + {-0.777863, 0.681901}, + {-0.622935, -0.776148}, + {-0.842153, -0.513615}, + {-0.342361, -0.285485}, + {-0.479340, -0.257759}, + {-0.647113, 0.708901}, + {0.404161, 0.178805}, + {-0.592213, -0.095235}, + {-0.331177, -0.271972}, + {0.977967, 0.215754}, + {-0.452242, 0.119274}, + {-0.898306, 0.546823}, + {0.470385, 0.097732}, + {1.074445, 0.120241}, + {0.311009, 0.477228}, + {-0.498992, 0.230706}, + {0.553832, 0.558558}, + {0.436860, 0.156143}, + {-0.444444, 0.249753}, + {0.486519, -0.106007}, + {-0.421283, 0.180623}, + {-0.406001, 0.247732}, + {0.450869, 0.165908}, + {-0.036799, -1.048837}, + {-0.204806, 0.991814}, + {-0.469319, -0.237311}, + {0.960148, -0.029572}, + {0.290759, -0.931106}, + {0.457885, 0.727751}, + {0.990829, -0.109917}, + {-0.020007, 0.545816}, + {0.709308, 0.874297}, + {-1.010977, -0.074784}, + {0.473314, 0.926140}, + {1.045204, 0.166321}, + {0.388059, -0.312612}, + {-0.110272, -1.061526}, + {-1.022783, 0.071001}, + {-0.879856, 0.008920}, + {-0.044214, 0.935743}, + {0.085258, 0.472718}, + {-1.010090, 0.084493}, + {-0.153919, 0.507331}, + {-0.914801, -0.077787}, + {0.397552, 0.253458}, + {-0.071208, -0.584040}, + {-0.586113, 0.822001}, + {-0.315848, -0.428398}, + {-0.475201, 0.045856}, + {0.119077, 0.958341}, + {-0.004970, -0.633133}, + {-0.091496, -1.063429}, + {-0.977251, 0.001460}, + {0.105994, 0.535126}, + {0.906682, -0.362689}, + {0.419639, 0.227265}, + {-0.128094, 0.443781}, + {-0.236173, -0.421747}, + {-0.561705, -0.149725}, + {-0.399144, -0.315863}, + {0.249800, 0.456173}, + {-0.067688, 0.474221}, + {-0.403660, -0.089936}, + {0.422568, -0.195349}, + {-0.507068, 0.236393}, + {-0.049440, 0.494637}, + {0.573601, 0.160837}, + {-0.957441, 0.346013}, + {-0.103069, 0.984878}, + {0.732054, 0.654709}, + {0.505812, -0.848135}, + {0.136014, 0.432586}, + {0.423961, -1.023403}, + {-0.993448, -0.073076}, + {0.716949, 0.686259}, + {-0.475708, -0.013893}, + {-0.932824, -0.520301}, + {0.507099, 0.099702}, + {-0.536745, -0.061553}, + {-0.749363, 0.642360}, + {0.871757, 0.398393}, + {0.139424, -0.579037}, + {-0.513559, 0.829711}, + {0.216548, 0.518864}, + {0.528756, -0.211615}, + {-0.498062, 0.252568}, + {-0.961372, -0.198659}, + {-0.997016, 0.387509}, + {-0.665681, 0.794896}, + {0.479599, 0.001011}, + {-0.491049, 0.160684}, + {0.418982, -0.324877}, + {0.513648, 0.881750}, + {0.389844, 0.224851}, + {0.909708, 0.223947}, + {-0.320696, -0.223657}, + {0.195747, 0.454857}, + {-0.472384, -0.971927}, + {0.818149, -0.552201}, + {0.300139, 1.023248}, + {-0.475618, 0.766312}, + {0.952992, -0.295727}, + {-0.156673, -0.960558}, + {-0.072489, -1.029532}, + {0.565584, -0.871809}, + {0.968489, -0.416161}, + {-0.158193, -0.469685}, + {-0.035628, -0.566708}, + {-0.868991, -0.393100}, + {0.120758, 0.482890}, + {-0.499142, -0.133691}, + {0.718468, -0.673767}, + {0.483947, 0.200953}, + {0.504083, -0.092725}, + {-0.380365, -0.348349}, + {0.644130, 0.753145}, + {0.325310, 0.443521}, + {-0.712700, -0.626573}, + {0.432635, -0.220105}, + {0.509025, -0.003331}, + {-0.140491, 0.458993}, + {0.554641, 0.831357}, + {0.382893, 0.180935}, + {0.856840, 0.624508}, + {0.306591, 0.314238}, + {-0.157257, -0.989907}, + {0.271623, 0.321017}, + {0.045540, 1.064526}, + {0.742861, 0.603701}, + {-0.076098, -0.977182}, + {0.897281, -0.340274}, + {-0.878503, 0.487946}, + {0.361002, -0.343894}, + {0.236070, -0.887971}, + {-0.418928, 0.076475}, + {0.310445, -0.936192}, + {-0.679949, 0.792224}, + {-0.238985, 0.434101}, + {0.222413, -0.405034}, + {0.473205, 0.034184}, + {0.406588, 0.274089}, + {-0.345188, -0.358048}, + {0.017197, -0.945138}, + {0.913779, -0.598842} +}; + +static const std::vector<short> noisy_circles_labels { + 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, +}; + +static const std::vector<cv::Vec2f> noisy_moons { + {0.496271, -0.342753}, + {-0.166300, 0.922342}, + {0.718956, 0.665290}, + {-0.337840, 0.912074}, + {0.103768, 0.116946}, + {0.702804, 0.667720}, + {-0.614904, 0.881684}, + {0.667835, -0.456815}, + {0.803439, 0.768419}, + {0.434519, 0.833548}, + {-0.451526, 0.867688}, + {0.573179, -0.413433}, + {1.566417, -0.440186}, + {1.396258, -0.353635}, + {1.011969, -0.562964}, + {1.071866, -0.033929}, + {-0.067705, 0.985937}, + {1.739636, -0.173039}, + {0.214441, -0.128790}, + {0.984292, -0.469513}, + {1.998867, 0.349441}, + {1.132009, -0.548606}, + {0.082511, 0.989596}, + {0.713686, -0.499899}, + {-1.036180, 0.389093}, + {0.475082, -0.369990}, + {0.185801, 0.952638}, + {0.119731, 0.022406}, + {1.993655, 0.445478}, + {0.637446, 0.747901}, + {1.068196, -0.482278}, + {-0.148474, 1.050313}, + {0.386807, 0.980657}, + {-0.178671, 0.940450}, + {1.282258, -0.396343}, + {-0.980326, 0.100863}, + {1.987377, 0.464477}, + {0.126748, -0.112373}, + {0.444394, -0.291783}, + {0.615013, 0.724495}, + {-0.907856, 0.515206}, + {0.006890, 0.971489}, + {1.815501, 0.005442}, + {1.973811, 0.316884}, + {0.888139, -0.557867}, + {0.013169, 1.014930}, + {1.958637, 0.154446}, + {0.466269, 0.879144}, + {0.423977, 0.988572}, + {0.669984, 0.789333}, + {0.549956, 0.826760}, + {0.652881, 0.678939}, + {0.167620, 0.124025}, + {2.021983, 0.289367}, + {2.036312, 0.392123}, + {-0.705304, 0.802209}, + {0.721721, -0.446847}, + {-1.057252, 0.288871}, + {0.538738, 0.707988}, + {-0.730453, 0.641255}, + {-0.085058, 1.040617}, + {0.446517, 0.817575}, + {0.895367, 0.414274}, + {0.299042, -0.121882}, + {0.340815, -0.268886}, + {0.640343, -0.425107}, + {-0.104821, 0.874745}, + {1.025808, 0.030871}, + {1.500083, -0.388380}, + {1.058557, -0.486871}, + {0.153143, 0.143906}, + {0.698832, 0.732750}, + {0.337857, 1.001806}, + {0.582376, 0.779731}, + {0.516631, 0.908242}, + {-0.012161, 0.549717}, + {0.377415, -0.209377}, + {0.398307, 0.876080}, + {0.079609, 0.407017}, + {0.932146, 0.253114}, + {0.390304, -0.209082}, + {-0.548919, 0.775369}, + {0.601761, -0.472310}, + {0.330164, -0.214821}, + {1.870198, 0.073266}, + {0.239898, -0.051028}, + {-0.173536, 1.009318}, + {0.596136, -0.400319}, + {0.573521, -0.352605}, + {2.056516, 0.169410}, + {0.608283, 0.768349}, + {0.009094, 0.943835}, + {0.940722, 0.280645}, + {0.460975, -0.396293}, + {1.592816, -0.425294}, + {1.495644, -0.381199}, + {1.721367, -0.131403}, + {1.575977, -0.286960}, + {0.020088, 0.569959}, + {0.811551, 0.576702}, + {0.055550, 0.272523}, + {1.819475, -0.054582}, + {1.103558, -0.453437}, + {0.409392, 1.025252}, + {0.737369, 0.751975}, + {0.872074, 0.504964}, + {0.785829, -0.466771}, + {0.962392, -0.564115}, + {-0.110210, 0.953938}, + {-0.070268, 0.997614}, + {1.378774, -0.458579}, + {1.738328, -0.388595}, + {0.639144, -0.496515}, + {0.078786, -0.000002}, + {0.040087, 0.090268}, + {1.576896, -0.287797}, + {-0.200912, 1.063326}, + {0.998387, 0.144506}, + {0.323512, -0.122834}, + {0.264926, 1.015290}, + {0.100261, -0.065602}, + {1.658930, -0.317580}, + {1.947505, 0.131751}, + {0.983862, -0.484429}, + {0.157345, -0.017765}, + {0.891421, -0.564348}, + {1.660918, -0.357718}, + {-0.800244, 0.655224}, + {-0.887394, 0.572426}, + {0.192676, -0.208585}, + {0.436821, -0.373582}, + {1.544492, -0.292624}, + {0.781851, 0.650672}, + {-0.974938, 0.423303}, + {2.057088, 0.445394}, + {0.104283, 0.139031}, + {-0.900360, 0.514926}, + {0.110123, 0.152040}, + {0.132428, -0.100307}, + {1.588997, -0.316330}, + {0.635979, -0.299898}, + {-0.931900, 0.393856}, + {0.439267, -0.440381}, + {0.141521, 0.106246}, + {-0.918870, 0.431856}, + {0.962587, -0.431892}, + {-0.217579, 0.993247}, + {0.800562, -0.441895}, + {-1.040423, 0.047103}, + {1.044428, 0.208865}, + {1.810265, 0.077613}, + {1.759604, -0.009136}, + {0.902235, 0.578826}, + {-0.012210, 0.400599}, + {-0.821795, 0.444680}, + {0.193363, -0.173325}, + {1.713100, -0.297758}, + {-0.967452, 0.222840}, + {1.055905, -0.589195}, + {0.504378, 0.887087}, + {0.547195, 0.819841}, + {0.299226, -0.193671}, + {1.487537, -0.376296}, + {0.835609, 0.513659}, + {0.658154, -0.423461}, + {1.233342, -0.417314}, + {0.809141, 0.420955}, + {0.746324, 0.693303}, + {0.949128, 0.445078}, + {1.054587, 0.125273}, + {0.517902, 0.890201}, + {1.768829, -0.051471}, + {0.205701, -0.161854}, + {0.739271, 0.680402}, + {0.262667, 0.935655}, + {0.342983, -0.260148}, + {1.475912, -0.406119}, + {-0.504364, 0.856305}, + {1.913484, 0.238542}, + {0.004023, 0.175472}, + {-0.554247, 0.674363}, + {0.970432, 0.213194}, + {0.928017, 0.114638}, + {1.114424, -0.505299}, + {0.413875, 1.037991}, + {-0.909651, 0.566537}, + {0.129417, 0.983640}, + {0.252087, -0.173061}, + {2.046959, 0.181122}, + {0.668592, 0.790053}, + {1.040943, 0.045980}, + {-0.942211, 0.466921}, + {0.899339, -0.583971}, + {-0.948669, 0.430538}, + {-0.028274, 1.008480}, + {0.377596, -0.349484}, + {0.177070, 0.978919}, + {2.010137, 0.261438}, + {-0.411131, 0.892558}, + {1.306855, -0.507745}, + {-1.060357, 0.038647}, + {-0.736548, 0.808592}, + {1.910212, 0.181975}, + {0.877901, -0.447353}, + {0.852328, 0.416398}, + {-0.369799, 0.969105}, + {1.331886, -0.389373}, + {-0.020269, 0.176746}, + {0.466894, -0.341575}, + {-0.488444, 0.868594}, + {1.583979, -0.333800}, + {0.680046, -0.516741}, + {-0.433420, 0.840947}, + {2.047737, 0.115775}, + {-0.025382, 0.204912}, + {0.040868, 0.437197}, + {1.409347, -0.322897}, + {0.241290, -0.148644}, + {0.547439, 0.792839}, + {0.419439, 0.934155}, + {0.990374, 0.317210}, + {-0.932609, 0.226892}, + {0.964145, 0.154370}, + {0.365350, 0.880556}, + {1.966250, 0.282548}, + {1.382008, -0.428482}, + {1.774570, -0.079093}, + {1.279362, -0.475287}, + {-0.327030, 0.942494}, + {-0.846831, 0.598684}, + {1.821176, 0.154144}, + {-0.297012, 0.964664}, + {0.284678, -0.246232}, + {0.036619, 0.871615}, + {-0.882686, 0.561393}, + {0.463534, -0.405212}, + {-1.019289, 0.096581}, + {1.186580, -0.503269}, + {1.064199, 0.203492}, + {-0.014080, 0.984262}, + {-0.260531, 0.937734}, + {0.476119, 0.888053}, + {-0.899156, 0.370780}, + {-0.967527, 0.198586}, + {0.080516, 0.304394}, + {-0.152795, 0.994968}, + {0.134037, -0.026378}, + {0.342460, 0.048616}, + {0.789416, -0.523685}, + {1.758768, -0.136356}, + {0.380487, 0.954451}, + {0.291565, -0.184119}, + {-0.571589, 0.771131}, + {-0.078582, 0.267424}, + {-0.897296, 0.405563}, + {-0.734993, 0.686952}, + {-0.082654, 0.991224}, + {0.358199, -0.181583}, + {0.458459, -0.396925}, + {0.172811, 0.984229}, + {0.740393, -0.470821}, + {1.006055, 0.239333}, + {-0.431573, 0.914546}, + {1.696607, -0.309738}, + {1.932289, 0.376846}, + {0.929765, 0.453516}, + {2.035588, 0.568315}, + {0.976158, 0.124099}, + {0.463355, -0.424725}, + {-0.601509, 0.752203}, + {-0.562183, 0.802706}, + {0.572949, 0.839057}, + {0.405519, -0.279836}, + {1.357518, -0.454862}, + {0.096638, 1.016000}, + {-0.890866, 0.537476}, + {0.086266, -0.108601}, + {-0.282772, 0.980814}, + {0.471907, 0.926533}, + {0.366001, 0.864812}, + {0.657707, 0.909999}, + {0.563240, -0.350304}, + {1.001594, -0.564994}, + {1.214816, -0.449014}, + {1.486306, -0.402688}, + {0.874145, 0.154797}, + {1.836478, -0.104014}, + {0.027896, 0.289415}, + {-0.025324, 0.509605}, + {0.616038, 0.919443}, + {0.028360, 0.464538}, + {0.752592, 0.689399}, + {0.590992, 0.717415}, + {0.017417, 0.978641}, + {0.623180, -0.385546}, + {1.963936, 0.073110}, + {-0.809626, 0.504689}, + {2.023012, 0.398103}, + {0.282129, -0.168219}, + {-0.135411, 0.934845}, + {0.927352, -0.570734}, + {0.701812, -0.566872}, + {1.925137, 0.111727}, + {-0.831711, 0.413159}, + {0.381555, -0.333279}, + {1.901296, 0.031873}, + {-0.571052, 0.790012}, + {-1.030996, 0.054978}, + {1.645374, -0.130236}, + {0.805682, 0.544531}, + {-0.994894, 0.159745}, + {0.126796, 0.142265}, + {0.050546, 0.010417}, + {0.263523, -0.167431}, + {0.921280, 0.268062}, + {-0.656305, 0.601641}, + {-0.143499, 0.977204}, + {0.945685, 0.585951}, + {0.013709, 0.509968}, + {1.729951, -0.213765}, + {1.759855, 0.005968}, + {1.155554, -0.474211}, + {0.195909, 0.924522}, + {-0.931949, 0.384193}, + {0.200643, 1.056856}, + {2.030331, 0.517385}, + {-0.785892, 0.557837}, + {1.936705, 0.058275}, + {0.088427, 0.159000}, + {0.366030, 0.972371}, + {1.078585, -0.460590}, + {1.256507, -0.459344}, + {-0.946477, 0.085086}, + {-1.073925, 0.177264}, + {0.118155, 0.129063}, + {0.036859, 0.302329}, + {2.050380, 0.157713}, + {0.053195, 1.025376}, + {0.019131, 0.275517}, + {-0.057567, 0.414117}, + {0.174004, -0.151689}, + {1.963096, 0.340024}, + {0.792813, -0.429732}, + {0.542305, 0.792847}, + {1.030704, 0.020613}, + {-0.870394, 0.580660}, + {0.947174, -0.026291}, + {-0.035915, 0.235092}, + {0.912323, 0.430158}, + {0.393322, 0.871471}, + {1.616672, -0.278860}, + {1.898796, 0.319588}, + {0.143081, 0.908479}, + {0.833448, 0.460590}, + {0.566370, 0.795585}, + {-0.795690, 0.478968}, + {-0.521798, 0.763925}, + {0.463918, -0.427475}, + {0.972411, 0.172115}, + {0.328914, 0.989370}, + {-0.330882, 0.879693}, + {1.340195, -0.452956}, + {-0.356462, 0.927992}, + {-0.223078, 0.927490}, + {0.206803, -0.043373}, + {-1.059685, 0.207520}, + {-0.886412, 0.239992}, + {0.727928, 0.569232}, + {2.014097, 0.407058}, + {1.108755, 0.075316}, + {-0.923454, 0.049743}, + {0.407518, 0.917457}, + {0.906429, 0.078531}, + {1.610760, -0.274863}, + {1.068399, -0.557376}, + {1.843047, -0.028402}, + {0.274464, -0.211134}, + {0.914475, 0.229288}, + {1.383910, -0.409746}, + {1.862668, 0.396777}, + {-0.012625, 0.462519}, + {1.689782, -0.178566}, + {0.262078, -0.241627}, + {-0.047884, 0.973583}, + {0.880122, -0.529893}, + {0.902445, -0.491365}, + {-0.019043, 0.040873}, + {0.707514, -0.391041}, + {-0.724897, 0.693954}, + {0.372070, 0.914303}, + {0.927815, 0.355252}, + {0.794788, -0.532710}, + {-0.957853, 0.179512}, + {0.735042, -0.526675}, + {-0.844149, 0.537472}, + {1.585073, -0.250573}, + {0.875332, -0.485010}, + {0.796758, -0.493820}, + {-0.872319, 0.258632}, + {0.603286, -0.335370}, + {-0.695870, 0.646880}, + {-0.498993, 0.894352}, + {0.162072, 0.982262}, + {2.007652, 0.283631}, + {1.978689, 0.382974}, + {-0.805040, 0.470932}, + {1.962411, 0.161136}, + {0.930354, -0.537602}, + {0.934006, 0.067405}, + {-0.754532, 0.540486}, + {-0.604119, 0.716755}, + {-0.974534, 0.157934}, + {-0.055294, 0.985908}, + {1.693047, -0.202096}, + {-0.811544, 0.595923}, + {0.988753, 0.259068}, + {0.910798, 0.379193}, + {-0.682960, 0.750650}, + {1.190720, -0.564751}, + {1.682545, -0.261579}, + {1.047946, -0.427851}, + {-0.868704, 0.378066}, + {-0.613038, 0.816375}, + {1.642798, -0.240747}, + {0.716391, 0.720832}, + {0.014638, 0.423205}, + {0.128033, 0.956122}, + {-0.478291, 0.912955}, + {1.066181, 0.076145}, + {-0.775598, 0.623022}, + {1.024819, 0.058190}, + {-1.016538, 0.131743}, + {1.993535, 0.373910}, + {0.484023, 0.906797}, + {0.643277, 0.716530}, + {0.250731, -0.075192}, + {1.282402, -0.457561}, + {-0.658440, 0.773163}, + {0.647803, -0.494807}, + {0.858833, 0.481916}, + {-0.982523, 0.330829}, + {1.055949, -0.526800}, + {-0.481049, 0.998914}, + {0.011470, 1.010560}, + {1.919935, 0.049774}, + {1.011512, -0.114710}, + {0.870945, 0.548585}, + {-0.539433, 0.897177}, + {0.023966, 0.047861}, + {0.086763, 0.968948}, + {0.792762, 0.667084}, + {0.803375, 0.553578}, + {1.047347, 0.197931}, + {0.273136, -0.208467}, + {0.463516, 0.931923}, + {1.001583, -0.527386}, + {0.263144, 0.834717}, + {0.040992, 0.896198}, + {0.529531, -0.333572}, + {1.849525, -0.116135}, + {2.010013, 0.341519}, + {0.954687, 0.056256}, + {-0.961819, 0.555229}, + {-1.037350, 0.178098}, + {1.959100, 0.281157}, + {0.544748, -0.375624}, + {1.713845, -0.172761}, + {1.948518, 0.193389}, + {1.585462, -0.303281}, + {0.887551, -0.496036}, + {0.017488, 0.961959}, + {1.007602, 0.131019}, + {0.765145, -0.510643}, + {0.188689, -0.118159}, + {-0.016115, 0.235161}, + {0.837375, 0.375398}, + {1.974453, 0.550002}, + {1.869913, -0.159721}, + {-0.051454, 0.221528}, + {0.981590, 0.134119}, + {1.476609, -0.368615}, + {-0.623378, 0.783102}, + {0.623551, 0.791507}, + {-0.615059, 0.748300}, + {1.509050, -0.383068}, + {0.971287, -0.404530}, + {1.670550, -0.266694}, + {2.057936, 0.172495}, + {0.392840, 1.012723}, + {0.611677, 0.798972}, + {-0.630367, 0.909643}, + {0.085440, 0.004517}, + {0.666127, 0.825488}, + {0.414683, 0.919746}, + {-1.001736, -0.053692}, + {2.042805, 0.504148}, + {0.737137, -0.425287}, + {0.888802, 0.554820}, + {-0.791947, 0.641675}, + {1.516305, -0.409061}, + {-0.840593, 0.539072}, + {-0.105039, 1.011806}, + {1.369623, -0.547646}, + {0.042257, 0.254585}, + {0.811323, 0.683292}, + {1.576423, -0.262082}, + {0.184115, 0.931668}, + {0.946175, -0.470095}, + {0.256002, 0.969496}, + {0.123463, 0.998779}, + {0.779836, -0.406278}, + {1.299751, -0.458160}, + {0.246294, 1.006846}, + {1.258167, -0.510401}, + {0.991527, 0.151969}, + {1.429809, -0.375911}, + {0.168439, 0.036398}, + {0.817818, -0.439428}, + {0.250526, -0.167255}, + {0.028227, 0.452056}, + {-0.176511, 1.006626}, + {0.669383, 0.737935}, + {-0.778768, 0.689070}, + {2.014209, 0.348268}, + {-0.668901, 0.631334}, + {0.700043, 0.775122}, + {0.127051, 0.966583}, + {-0.615550, 0.803914}, + {-0.638229, 0.784227}, + {1.637936, -0.255958}, + {0.601378, -0.368817}, + {0.977976, -0.535715}, + {1.933565, 0.315332}, + {1.392589, -0.299979}, + {-0.988392, 0.225844}, + {1.810280, -0.101660}, + {1.658857, -0.289555}, + {-0.510122, 0.996818}, + {-0.398897, 0.834220}, + {1.503831, -0.270006}, + {-0.297766, 0.931551}, + {1.038481, -0.574859}, + {0.595492, 0.725707}, + {-0.788434, 0.711187}, + {-0.961470, 0.252442}, + {-0.013059, 0.918064}, + {0.846959, 0.620696}, + {0.594875, -0.415357}, + {-0.978066, 0.463218}, + {1.190432, -0.517136}, + {1.878252, 0.002960}, + {1.924820, 0.123009}, + {0.954405, 0.379896}, + {0.405748, -0.322683}, + {0.089029, 0.148671}, + {-0.336937, 0.884798}, + {-0.117016, 0.918931}, + {0.396080, -0.334715}, + {-0.921743, 0.308865}, + {0.850389, 0.430958}, + {0.389593, -0.277222}, + {1.971562, 0.352262}, + {-0.703930, 0.723667}, + {2.003826, 0.110409}, + {0.056923, 0.112895}, + {0.861734, 0.705571}, + {-0.747621, 0.702980}, + {0.049177, 0.252773}, + {-1.044252, 0.210782}, + {1.918267, 0.106201}, + {0.015492, 0.216829}, + {-0.411690, 0.895506}, + {-0.144124, 0.942843}, + {0.444993, -0.342964}, + {-0.997800, -0.022769}, + {0.783241, 0.632167}, + {0.069239, 0.488263}, + {0.080523, 1.034611}, + {0.416876, -0.287567}, + {0.920497, 0.108863}, + {0.682463, -0.432382}, + {1.599841, -0.138063}, + {-0.615892, 0.763435}, + {-0.061584, 1.071994}, + {1.914421, 0.067344}, + {0.510691, -0.295096}, + {0.236741, -0.190955}, + {1.131800, -0.479509}, + {0.739476, 0.653669}, + {1.792722, -0.198557}, + {1.572359, -0.415641}, + {-0.165740, 0.934407}, + {-1.017765, 0.233729}, + {1.002052, 0.158603}, + {0.079119, 0.084563}, + {1.014845, 0.046980}, + {1.816078, -0.144205}, + {-0.980715, 0.171495}, + {-0.703285, 0.717882}, + {-0.959211, 0.262014}, + {1.160088, -0.458143}, + {0.005613, 0.315028}, + {0.615970, -0.479113}, + {0.859002, 0.526447}, + {-0.405014, 0.866730}, + {-0.927944, 0.120513}, + {0.847125, 0.428229}, + {-0.016591, 0.386431}, + {-0.094287, 0.252717}, + {1.220941, -0.534576}, + {0.726582, 0.642565}, + {0.307360, -0.178595}, + {1.121450, -0.429976}, + {-0.895724, 0.464041}, + {0.941708, 0.338417}, + {0.069426, 0.168462}, + {0.824394, -0.472337}, + {1.140648, -0.493586}, + {-0.791807, 0.590292}, + {1.743109, -0.110036}, + {-0.199136, 0.987622}, + {1.820615, 0.010975}, + {0.079542, 0.952591}, + {-0.546314, 0.779701}, + {-0.919637, 0.274297}, + {0.183059, 0.969702}, + {0.290056, 0.859716}, + {-0.270505, 0.964013}, + {-0.660530, 0.714735}, + {1.762770, -0.187882}, + {-0.373097, 0.866083}, + {0.523990, -0.396502}, + {0.228475, 0.932237}, + {0.806318, -0.439653}, + {0.040753, 0.237637}, + {1.099178, -0.483577}, + {0.858106, 0.591586}, + {1.271853, -0.369148}, + {1.626611, -0.323550}, + {-0.123639, 0.502025}, + {0.130780, 1.009305}, + {0.243747, -0.162773}, + {0.010425, 0.566818}, + {-0.508881, 0.957991}, + {-0.593271, 0.753624}, + {0.268535, -0.204692}, + {0.418663, -0.342013}, + {0.192743, -0.091517}, + {-0.911233, 0.235734}, + {0.878685, 0.452582}, + {-0.236781, 0.973836}, + {-0.773233, 0.640352}, + {0.436380, -0.270300}, + {-0.909861, 0.415216}, + {1.684271, -0.280306}, + {0.184936, 0.968389}, + {1.052570, 0.178306}, + {0.694703, 0.711501}, + {0.286335, 0.933240}, + {0.652877, 0.636946}, + {1.823728, -0.184588}, + {0.790306, -0.510649}, + {0.356344, -0.254518}, + {0.097082, 0.187908}, + {0.475782, -0.274717}, + {0.231007, 1.005774}, + {1.795122, -0.117099}, + {0.801095, 0.567066}, + {0.946900, 0.240961}, + {0.637972, -0.366623}, + {0.304445, -0.310948}, + {-0.001808, 0.451750}, + {1.810474, 0.354936}, + {1.013389, 0.238449}, + {-0.798495, 0.460701}, + {0.751566, -0.415832}, + {0.247445, -0.177784}, + {0.122302, 0.258487}, + {0.201179, -0.173881}, + {-0.837225, 0.669824}, + {0.783701, 0.665509}, + {-0.018040, 0.370109}, + {0.437818, -0.347291}, + {-0.195249, 1.072674}, + {0.060387, 0.278019}, + {-0.913695, 0.429943}, + {1.457969, -0.290435}, + {0.070242, 1.076923}, + {-0.477700, 0.934233}, + {1.765876, -0.226673}, + {0.592394, 0.837986}, + {0.950505, 0.419898}, + {0.123300, 1.012986}, + {0.624291, -0.421914}, + {1.343748, -0.465895}, + {0.650881, 0.698266}, + {0.844325, -0.423582}, + {0.269609, 0.830784}, + {-0.123863, 1.098885}, + {1.702336, -0.181974}, + {1.361339, -0.412906}, + {1.062883, 0.319179}, + {1.869669, 0.234356}, + {0.689881, -0.357275}, + {-0.484569, 0.882117}, + {-0.028965, 0.400626}, + {-0.918874, 0.469227}, + {1.113433, -0.500161}, + {1.652722, -0.219777}, + {1.880378, 0.279037}, + {0.905364, 0.413704}, + {-0.630856, 0.785450}, + {0.981790, 0.172254}, + {0.414366, 0.914970}, + {-0.022160, 0.919562}, + {0.888195, -0.436919}, + {-0.041295, 0.145085}, + {-0.899383, 0.418387}, + {-0.506611, 0.886182}, + {1.102557, -0.492328}, + {0.138441, 0.981428}, + {1.272340, -0.441868}, + {0.958767, 0.232284}, + {1.351935, -0.466713}, + {0.772701, 0.661288}, + {1.827292, -0.072850}, + {0.097917, 0.014184}, + {1.779244, 0.001716}, + {0.209755, 1.021343}, + {0.731039, -0.465006}, + {1.132549, -0.472395}, + {0.088217, 0.924143}, + {1.681411, -0.125958}, + {1.773324, -0.067148}, + {-0.417047, 0.938815}, + {-0.940901, 0.401605}, + {1.063309, 0.266846}, + {1.926717, 0.273951}, + {1.618181, -0.322081}, + {0.928029, -0.481319}, + {-0.996931, 0.294634}, + {1.466848, -0.427068}, + {0.145702, 0.978156}, + {1.863714, -0.091411}, + {0.313786, 0.962891}, + {-0.015516, 0.371711}, + {1.814466, 0.104112}, + {-0.703469, 0.829162}, + {-0.219409, 1.056912}, + {1.847164, -0.067939}, + {1.649082, -0.430069}, + {1.963644, 0.095740}, + {-0.233576, 0.912699}, + {-0.254144, 1.034611}, + {0.947022, 0.359081}, + {-0.495804, 0.776957}, + {-0.010219, 0.094684}, + {0.134275, -0.084927}, + {0.385201, -0.217824}, + {0.147113, 0.920659}, + {-0.552964, 0.813835}, + {1.917175, 0.299968}, + {1.238795, -0.489206}, + {0.806173, 0.564016}, + {0.562590, 0.851649}, + {2.065116, 0.576776}, + {-0.209235, 0.939668}, + {0.586169, -0.443558}, + {0.213571, -0.185088}, + {0.026146, 0.417267}, + {0.888511, -0.501655}, + {2.076865, 0.390374}, + {0.110074, -0.072791}, + {-0.702488, 0.656150}, + {0.112400, 0.998404}, + {0.970428, 0.408279}, + {-1.037110, 0.364119}, + {-0.973274, 0.242688}, + {0.572525, -0.451005}, + {1.530146, -0.409321}, + {0.513328, 0.751046}, + {0.501972, 0.872710}, + {-0.095367, 0.509063}, + {-0.876611, 0.247547}, + {1.560595, -0.266934}, + {0.272575, -0.262411}, + {-0.518970, 0.897349}, + {0.488126, 0.886857}, + {1.801540, -0.205026}, + {-1.023219, 0.079988}, + {0.771314, 0.605261}, + {0.704482, 0.600302}, + {-1.070810, 0.074274}, + {0.890178, -0.527951}, + {0.933021, -0.459874}, + {1.906469, 0.028193}, + {-0.331577, 1.021127}, + {-0.047549, 0.193271}, + {1.917958, -0.009012}, + {0.961895, 0.448328}, + {0.805569, 0.325809}, + {1.329618, -0.469317}, + {0.185347, -0.048335}, + {-0.115227, 0.937911}, + {0.770947, -0.469683}, + {0.968596, 0.455542}, + {0.926832, -0.541946}, + {0.541607, 0.804993}, + {-0.564031, 0.875823}, + {2.057631, 0.376087}, + {0.140188, -0.116968}, + {0.608815, 0.891560}, + {0.924562, 0.502569}, + {-0.369076, 0.962036}, + {1.484494, -0.258392}, + {1.700646, -0.134132}, + {0.004085, 0.403135}, + {-0.778469, 0.647700}, + {1.794405, -0.096394}, + {1.071993, 0.205204}, + {0.577728, -0.370941}, + {0.194561, 0.982626}, + {-0.855157, 0.655290}, + {-1.022124, -0.016234}, + {-0.072611, 1.068761}, + {-0.502488, 0.793466}, + {-0.965752, 0.255553}, + {0.964323, 0.354032}, + {-0.832631, 0.644305}, + {0.415497, -0.287618}, + {1.483393, -0.407044}, + {0.240532, 1.038227}, + {0.889738, 0.587310}, + {1.977431, 0.199800}, + {-0.994073, 0.145032}, + {0.491942, 0.871268}, + {1.943857, 0.323828}, + {0.553876, 0.974438}, + {1.749833, -0.211385}, + {0.817430, 0.683119}, + {1.025486, 0.311845}, + {-1.041813, 0.065283}, + {0.927884, 0.266655}, + {1.055491, 0.000754}, + {1.617931, -0.179946}, + {1.864250, 0.007130}, + {-0.775088, 0.593845}, + {-0.778315, 0.724098}, + {-0.265298, 0.911709}, + {-0.006731, 0.213446}, + {1.796149, -0.077659}, + {0.046005, 1.041695}, + {0.278435, -0.367633}, + {1.056302, 0.003752}, + {-0.827518, 0.478343}, + {1.761870, -0.141272}, + {0.203481, 1.035961}, + {0.578188, -0.455238}, + {-0.353864, 0.891790}, + {0.978292, -0.505724}, + {0.304723, 0.872209}, + {1.968029, 0.448676}, + {-0.948102, 0.504910}, + {0.749021, -0.430916}, + {-0.168103, 0.936456}, + {-0.929200, 0.402479}, + {1.969431, 0.241906}, + {0.139604, 0.026284}, + {-0.917267, 0.414950}, + {0.414750, 0.919978}, + {1.137264, -0.556664}, + {0.692865, 0.682379}, + {1.691508, -0.117563}, + {0.896428, 0.362007}, + {-0.894701, 0.114668}, + {0.606027, 0.829339}, + {0.002779, 0.040400}, + {-0.788992, 0.559568}, + {1.015192, -0.063149}, + {-1.127206, 0.033944}, + {0.089662, -0.129168}, + {-1.008327, 0.307763}, + {0.857693, 0.487736}, + {0.156809, 0.045769}, + {2.039753, 0.536073}, + {0.922407, 0.483239}, + {1.023954, -0.459292}, + {1.422774, -0.362877}, + {0.077695, -0.005755}, + {0.765989, -0.403496}, + {1.755280, -0.071936}, + {0.628866, 0.845062}, + {1.865356, -0.094322}, + {0.837605, 0.576419}, + {0.856077, 0.376384}, + {1.980884, 0.297995}, + {-0.494306, 0.876457}, + {1.163098, -0.499559}, + {0.822718, 0.631627}, + {1.573271, -0.323713}, + {0.539157, 0.914428}, + {0.115842, -0.170725}, + {1.886645, 0.088309}, + {0.491619, 0.831360}, + {1.237571, -0.536248}, + {0.948463, 0.315026}, + {-1.000791, 0.077147}, + {0.063607, -0.003559}, + {-0.038414, 0.208159}, + {1.713575, -0.201462}, + {-0.777612, 0.553862}, + {0.529974, -0.278545}, + {2.011906, 0.490380}, + {0.025160, 1.064478}, + {1.851780, 0.117649}, + {0.883731, 0.596139}, + {1.895900, 0.255129}, + {0.812410, 0.507357}, + {1.322986, -0.487688}, + {0.239077, 0.914062}, + {0.161163, 0.954431}, + {-0.714085, 0.747340}, + {1.099939, -0.481123}, + {1.316430, -0.439051}, + {0.637417, -0.452223}, + {0.709382, -0.493668}, + {1.022628, 0.167743}, + {0.314550, 0.977636}, + {0.768385, 0.648182}, + {-0.293145, 0.912156}, + {0.860516, 0.186809}, + {-0.788605, 0.721582}, + {-0.666887, 0.769339}, + {0.646930, -0.426946}, + {1.672479, -0.225887}, + {1.476016, -0.372136}, + {-0.842952, 0.342001}, + {-0.064826, 1.005730}, + {0.063680, 0.027235}, + {1.447327, -0.402177}, + {1.532738, -0.302256}, + {0.295973, 0.991352}, + {1.380631, -0.498410}, + {-0.302976, 0.941201}, + {-0.493432, 0.859237}, + {-0.999601, 0.336260}, + {-0.830666, 0.718992}, + {-0.980283, 0.155477}, + {0.391269, -0.370320}, + {1.099411, -0.559854}, + {-0.275466, 0.986200}, + {0.487358, -0.413786}, + {-0.378258, 0.827067}, + {0.496750, -0.299648}, + {1.515076, -0.303851}, + {0.026684, 1.014932}, + {-0.098800, 1.020516}, + {1.035718, -0.450237}, + {0.792161, 0.729022}, + {-0.658071, 0.573861}, + {0.320033, -0.230940}, + {0.829639, 0.565706}, + {0.018966, 0.442025}, + {1.606368, -0.204381}, + {0.484741, -0.266998}, + {1.313964, -0.456586}, + {0.573980, 0.751020}, + {0.007844, 0.247142}, + {1.509728, -0.329699}, + {0.142884, -0.017739}, + {0.010814, 0.220911}, + {0.079250, 0.262280}, + {0.727431, -0.430450}, + {-0.529456, 0.783135}, + {-0.314719, 1.023439}, + {-0.849429, 0.474732}, + {-0.221593, 1.089239}, + {-0.987279, 0.229743}, + {0.770743, 0.652182}, + {0.951870, 0.010946}, + {-0.856354, 0.525438}, + {1.029354, -0.452736}, + {1.424133, -0.474354}, + {1.801520, -0.067370}, + {1.744520, -0.369512}, + {-0.043462, 0.403862}, + {0.724772, -0.651344}, + {1.922169, -0.039369}, + {1.018020, -0.447123}, + {0.764845, 0.618281}, + {0.930603, 0.502057}, + {0.476355, 0.920288}, + {0.334232, 0.899143}, + {1.716805, -0.234778}, + {0.902126, 0.227534}, + {-0.364474, 0.933141}, + {0.214953, 0.003566}, + {0.092235, 0.244482}, + {0.893276, 0.390847}, + {-0.483334, 0.914563}, + {2.018904, 0.071256}, + {-0.814643, 0.442269}, + {-0.613655, 0.810521}, + {0.762009, 0.419123}, + {1.434706, -0.337772}, + {-0.842737, 0.657621}, + {-1.048589, 0.054561}, + {-0.021857, 0.279999}, + {-0.490034, 0.897323}, + {1.867957, 0.060374}, + {0.317957, -0.226475}, + {0.095655, 1.039185}, + {0.971460, 0.030393}, + {0.844059, -0.602620}, + {2.057751, 0.335419}, + {1.540388, -0.310742}, + {0.871085, -0.605143}, + {0.402829, -0.230709}, + {1.785589, -0.126331}, + {0.043547, 0.290105}, + {1.025271, 0.189324}, + {0.518896, -0.331697}, + {-0.902327, 0.351792}, + {1.017409, 0.106655}, + {2.004715, 0.289078}, + {1.109100, -0.465287}, + {1.373370, -0.439988}, + {-1.101112, 0.069448}, + {-0.020436, 0.400367}, + {-0.222364, 0.941012}, + {0.926767, 0.542129}, + {-0.224489, 0.917377}, + {0.937605, 0.070316}, + {0.333242, 0.953593}, + {1.419875, -0.359573}, + {1.933062, 0.004952}, + {1.825539, -0.153958}, + {-0.725908, 0.701590}, + {1.183000, -0.496431}, + {0.979851, 0.278704}, + {0.747287, 0.613190}, + {-0.880120, 0.446538}, + {0.956756, -0.495208}, + {0.541462, 0.889930}, + {-0.010937, 0.335959}, + {2.049883, 0.312684}, + {0.032665, 0.993500}, + {1.314915, -0.337891}, + {1.827553, 0.055617}, + {0.015135, 0.207463}, + {0.321188, 0.968582}, + {1.959680, 0.043287}, + {2.051663, 0.440216}, + {1.234955, -0.527606}, + {-1.006708, 0.135337}, + {-0.013463, 0.296579}, + {-0.900125, 0.387638}, + {0.062448, -0.002272}, + {0.739083, -0.429045}, + {-0.945328, 0.002822}, + {-0.319396, 0.996699}, + {-0.818791, 0.544160}, + {0.295365, 0.917986}, + {0.238260, -0.030368}, + {-0.032849, 1.011178}, + {1.890539, -0.048711}, + {0.069270, 1.051162}, + {-0.817974, 0.540803}, + {1.506988, -0.389107}, + {0.865010, 0.570521}, + {1.272596, -0.403276}, + {0.831473, 0.618589}, + {1.677542, -0.306637}, + {1.863664, -0.015044}, + {-0.983660, 0.219492}, + {1.409356, -0.440830}, + {0.556735, -0.362753}, + {1.542049, -0.293177}, + {0.275146, 0.922392}, + {0.839746, -0.565840}, + {0.594928, -0.416774}, + {-0.859591, 0.530238}, + {0.878811, 0.444530}, + {-1.089284, 0.174896}, + {1.933961, 0.096553}, + {0.800158, -0.495279}, + {-0.962624, 0.255423}, + {0.454111, -0.262032}, + {1.746187, -0.039707}, + {1.015309, 0.405267}, + {0.084266, -0.021184}, + {1.425057, -0.426102}, + {-0.050612, 0.295493}, + {0.290406, -0.221576}, + {1.053212, -0.476350}, + {-0.965724, 0.252549}, + {-0.515182, 0.923972}, + {-0.520874, 0.800913}, + {1.717090, -0.198103}, + {1.383848, -0.378162}, + {1.914799, 0.085750}, + {-0.135729, 1.055527}, + {-0.982776, 0.016877}, + {1.043567, -0.534758}, + {0.767395, -0.499783}, + {-0.858276, 0.439048}, + {-1.007341, 0.156550}, + {0.442303, -0.335325}, + {-0.643249, 0.715743}, + {0.154170, 0.058791}, + {1.874486, 0.179509}, + {1.257742, -0.507674}, + {0.842887, -0.535426}, + {-0.958227, 0.165488}, + {-0.884654, 0.397300}, + {-0.277570, 0.989903}, + {-0.027555, 0.435180}, + {-0.898964, 0.367345}, + {-0.968017, 0.080519}, + {-1.052020, 0.159805}, + {0.489639, 0.909463}, + {0.295100, -0.334256}, + {-0.293751, 0.941094}, + {-0.962256, 0.027125}, + {0.892193, 0.474452}, + {-0.742804, 0.616452}, + {-0.280649, 0.942420}, + {0.566586, -0.427992}, + {0.150308, 0.868716}, + {1.238216, -0.490968}, + {1.530832, -0.258454}, + {-0.936692, 0.285366}, + {-0.731766, 0.691292}, + {1.940116, 0.476755}, + {-0.942540, 0.330770}, + {0.287592, 0.996836}, + {0.452778, -0.379059}, + {-0.149537, 0.973974}, + {1.032119, 0.337238}, + {0.161169, -0.178615}, + {0.524032, 0.881968}, + {0.605678, -0.433667}, + {1.903029, 0.080978}, + {1.411402, -0.401393}, + {0.086160, 0.002624}, + {-0.112262, 0.627420}, + {-0.958406, 0.032572}, + {0.265949, 0.878927}, + {-0.330154, 0.930493}, + {0.810520, 0.604709}, + {0.965497, -0.467291}, + {1.015025, -0.529315}, + {-0.021882, 0.411085}, + {-0.628660, 0.735648}, + {-0.865102, 0.589042}, + {0.531753, 0.849087}, + {0.368138, -0.239757}, + {1.111555, -0.505976}, + {1.000575, 0.216265}, + {0.309629, -0.180464}, + {1.970165, 0.238080}, + {2.015501, 0.487637}, + {-0.668824, 0.801821}, + {-1.090992, 0.140943}, + {1.464551, -0.389069}, + {2.047649, 0.353707}, + {0.812124, 0.377782}, + {0.993446, 0.401215}, + {1.866624, -0.057398}, + {-0.615064, 0.784470}, + {-0.493770, 0.926331}, + {-0.703263, 0.706535}, + {0.833080, 0.593098}, + {0.419678, 0.932303}, + {0.061289, -0.029986}, + {0.111869, -0.032584}, + {-0.508201, 0.721360}, + {-0.049591, 0.462859}, + {-1.084732, 0.282470}, + {0.279268, 0.979543}, + {-0.336197, 1.009357}, + {0.138583, -0.037314}, + {-0.845177, 0.573057}, + {0.048651, 0.212818}, + {1.998907, 0.436598}, + {1.524810, -0.310846}, + {-0.852273, 0.693712}, + {0.312212, -0.137077}, + {0.604822, -0.414580}, + {-0.022099, 0.961760}, + {0.990277, -0.520190}, + {0.058058, 0.254649}, + {1.947760, 0.071421}, + {0.314997, -0.302236}, + {-1.043031, 0.044560}, + {1.106648, -0.435029}, + {-0.211299, 0.940982}, + {0.934626, 0.316289}, + {1.964347, 0.230726}, + {0.721664, 0.671392}, + {0.146093, -0.050481}, + {-0.342076, 0.937329}, + {2.011612, 0.448573}, + {0.974391, 0.314916}, + {0.298786, -0.143717}, + {0.955922, 0.324982}, + {-0.408658, 0.963722}, + {0.742804, 0.680852}, + {1.743709, -0.181210}, + {0.314714, -0.137710}, + {-0.092031, 0.961372}, + {-0.702479, 0.769795}, + {0.839017, 0.400835}, + {-1.041318, 0.316274}, + {1.846009, -0.076618}, + {0.407674, -0.321502}, + {1.976894, 0.284721}, + {0.337385, -0.334260}, + {0.586201, -0.368885}, + {0.432563, 0.924590}, + {-0.879775, 0.345697}, + {-0.014395, 0.313793}, + {0.503783, -0.239654}, + {-0.407768, 0.914401}, + {0.916260, 0.444225}, + {-0.418969, 0.901274}, + {1.111643, -0.452600}, + {0.937454, -0.527681}, + {0.835120, 0.624568}, + {-0.851018, 0.375570}, + {-0.915210, 0.378375}, + {-0.064244, 0.327803}, + {0.659794, 0.708016}, + {1.335793, -0.448514}, + {0.410420, -0.310221}, + {-0.162192, 0.998459}, + {0.223661, -0.198823}, + {-0.570358, 0.831877}, + {1.032324, 0.129681}, + {0.217019, -0.003042}, + {0.261615, -0.285742}, + {0.048796, 0.984813}, + {-0.254938, 0.994804}, + {0.898794, 0.046838}, + {1.069669, 0.126048}, + {0.440227, -0.285024}, + {0.136637, 0.198051}, + {1.120624, -0.477247}, + {-0.973364, 0.339979}, + {0.053698, 0.231351}, + {1.262157, -0.486460}, + {1.839316, -0.081125}, + {2.052578, 0.427548}, + {1.932266, 0.410544}, + {0.306282, 0.951114}, + {-0.075340, 0.944025}, + {1.898917, 0.198505}, + {0.981225, 0.336562}, + {-0.921751, 0.360200}, + {1.073715, 0.279362}, + {0.037450, 0.350880}, + {1.242632, -0.449359}, + {0.271190, 1.006297}, + {-0.955722, -0.022154}, + {0.398929, 0.849623}, + {1.905541, 0.235737}, + {0.849080, 0.490684}, + {-0.957821, 0.300314}, + {0.417028, 0.889683}, + {1.934534, 0.306650}, + {0.479683, -0.294547}, + {0.034986, 0.360210}, + {-1.038837, 0.211337}, + {0.205103, -0.070759}, + {0.190626, 0.037918}, + {0.645647, 0.801434}, + {-0.628091, 0.715487}, + {0.732760, 0.664974}, + {-0.590563, 0.775441}, + {0.285149, 0.959786}, + {0.800147, -0.467614}, + {-0.000921, 1.032517}, + {0.455246, 0.893279}, + {1.052181, -0.475257}, + {1.226588, -0.425567}, + {-0.432090, 0.925309}, + {1.829544, 0.255384}, + {0.944458, 0.191713}, + {-0.510158, 0.832587}, + {-0.930726, 0.161549}, + {-0.922595, 0.329888}, + {0.707979, 0.739976}, + {-0.613216, 0.766708}, + {1.258353, -0.470191}, + {0.927009, -0.498520}, + {0.324842, 0.903055}, + {0.871482, 0.453519}, + {-0.054499, 0.421917}, + {0.141363, 1.010463}, + {0.827176, 0.712774}, + {2.016852, 0.476308}, + {0.929437, -0.456706}, + {2.042305, 0.548997}, + {1.901681, 0.163530}, + {-0.930355, 0.407547}, + {0.479895, -0.351491}, + {1.983887, 0.347194}, + {0.017671, 0.484723}, + {1.639731, -0.290390}, + {1.932341, 0.071913}, + {0.501825, -0.281240}, + {1.921311, 0.087951}, + {1.272188, -0.498398}, + {-0.179918, 1.051137}, + {0.453132, 0.835018}, + {0.576611, 0.918667}, + {0.918902, 0.050946}, + {1.661269, -0.274173}, + {0.937542, 0.311417}, + {0.432592, 0.982486}, + {0.812409, 0.676360}, + {1.797159, -0.225232}, + {1.851369, 0.019509}, + {-0.283105, 0.926137}, + {-0.332006, 0.897045}, + {0.697053, 0.674013}, + {-0.584869, 0.754202}, + {1.410478, -0.486355}, + {0.287750, 0.903310}, + {2.012718, 0.390410}, + {1.903221, 0.379131}, + {-0.196606, 1.033605}, + {1.918604, 0.333567}, + {-0.511178, 0.915872}, + {0.251228, -0.121687}, + {0.424416, -0.280077}, + {-0.827322, 0.636587}, + {0.723174, 0.733239}, + {0.314638, 0.918349}, + {-0.198637, 0.852728}, + {1.403938, -0.402679}, + {0.169446, 1.059232}, + {1.861147, 0.020544}, + {-0.875108, 0.614762}, + {-0.431734, 0.877782}, + {-0.473136, 0.958484}, + {-0.005458, 0.493191}, + {-0.779139, 0.791404}, + {0.062583, 0.223050}, + {1.450417, -0.321252}, + {1.457999, -0.323413}, + {-0.521386, 0.858724}, + {1.159840, -0.501402}, + {0.205773, -0.082981}, + {0.452968, 0.808904}, + {0.632244, 0.834704}, + {0.027568, 0.405447}, + {1.005634, -0.060669}, + {1.173155, -0.403369}, + {1.415813, -0.360574}, + {-0.755428, 0.645590}, + {-0.921456, 0.104213}, + {0.319172, 0.959075}, + {-0.721720, 0.629173}, + {0.559405, -0.415354}, + {1.154913, -0.486450}, + {1.874627, 0.186733}, + {0.129949, 1.025790}, + {0.915931, -0.453787}, + {0.965287, 0.047880}, + {1.659713, -0.289383}, + {1.058690, -0.531482}, + {1.300179, -0.476471}, + {1.011569, 0.049704}, + {1.935927, 0.205163}, + {0.647294, -0.501768}, + {0.196952, -0.131321}, + {0.768647, 0.625616}, + {-0.268717, 0.917226}, + {0.910211, -0.515727}, + {1.517311, -0.313105}, + {-0.896194, 0.268710}, + {1.079940, -0.470747}, + {0.819778, 0.514925}, + {-0.945710, 0.255479}, + {0.122346, 0.051894}, + {1.787602, -0.139645}, + {0.752995, 0.515553}, + {0.180700, 0.006226}, + {-0.812868, 0.575579}, + {-0.233209, 0.953957}, + {0.423760, -0.306385}, + {-0.760465, 0.707430}, + {1.752590, -0.159040}, + {-0.047417, 1.142527}, + {0.103935, -0.066128}, + {1.716572, -0.148447}, + {0.062318, -0.103880}, + {-0.899097, 0.400504}, + {1.183183, -0.511290}, + {1.902193, 0.154401}, + {-0.103015, 1.005290}, + {0.300173, -0.307560}, + {0.257369, 0.968842}, + {1.109539, 0.205086}, + {0.770578, 0.568366}, + {0.934577, 0.060062}, + {0.969279, 0.282622}, + {1.654506, -0.246114}, + {0.032389, 0.169729}, + {0.050433, 0.403408}, + {1.600779, -0.341651}, + {-0.957760, 0.337992}, + {0.855063, -0.508219}, + {1.747808, -0.193790}, + {0.653936, 0.794221}, + {1.393704, -0.430918}, + {2.026835, 0.404619}, + {0.582225, 0.810004}, + {0.900367, 0.247613}, + {0.223586, -0.021075}, + {1.913451, 0.078152}, + {-0.939789, 0.600428}, + {0.634625, -0.382429}, + {1.185619, -0.384662}, + {0.301292, -0.396078}, + {0.062252, 0.188547}, + {0.439219, 0.809028}, + {0.114075, 0.086596}, + {0.385133, 0.924554}, + {0.636800, -0.372632}, + {0.274617, -0.202793}, + {1.972595, 0.127309}, + {0.137737, 0.092172}, + {-0.044042, 1.066223}, + {0.546031, 0.878942}, + {0.849479, 0.411200}, + {0.215150, 0.099633}, + {0.908682, -0.476567}, + {0.495083, 0.941848}, + {-0.752203, 0.614888}, + {0.619550, -0.325722}, + {-0.833069, 0.540707}, + {1.887803, -0.164009}, + {1.901957, 0.181567}, + {-0.376925, 0.949594}, + {0.341581, 0.966420}, + {-0.073042, 0.397439}, + {0.021347, 0.296053}, + {-0.642642, 0.716163}, + {1.937418, 0.231237}, + {1.406181, -0.399618}, + {0.243133, -0.237591}, + {1.046156, -0.455960}, + {0.196480, 0.990915}, + {-0.678494, 0.746111}, + {1.480257, -0.350615}, + {1.495622, -0.416584}, + {0.627392, 0.820522}, + {-0.845936, 0.240077}, + {0.176938, 0.156807}, + {1.623276, -0.226135}, + {0.025651, 0.264181}, + {0.736717, -0.510448}, + {1.759529, -0.164661}, + {0.992858, 0.297352}, + {1.004335, 0.050847}, + {-0.329659, 0.829825}, + {1.959744, 0.319912}, + {1.917142, 0.079347}, + {1.779574, -0.063431}, + {1.956901, 0.417775}, + {-0.838951, 0.550627}, + {-0.312107, 0.972094}, + {0.054083, 1.055564}, + {1.939328, 0.029565}, + {0.766661, 0.556358}, + {0.994651, 0.068223}, + {0.076859, 0.337722}, + {-0.630298, 0.809767}, + {-0.447665, 0.797417}, + {-0.422787, 0.921586}, + {0.199731, -0.283831}, + {-1.082445, 0.130062}, + {0.932234, 0.388892}, + {1.795673, -0.195881}, + {0.788854, 0.498824}, + {0.241845, 0.906703}, + {0.309588, -0.181482}, + {1.393854, -0.445827}, + {-0.668386, 0.729540}, + {0.897551, 0.245724}, + {0.079552, 0.124947}, + {0.905924, 0.329091}, + {0.474081, 0.860559}, + {1.869998, -0.016190}, + {-0.433127, 0.809947}, + {1.909509, 0.029897}, + {0.546231, -0.360031}, + {0.040900, 0.370693} +}; + +static const std::vector<short> noisy_moons_labels { +0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, +}; diff --git a/components/operators/test/dbscan_unit.cpp b/components/operators/test/dbscan_unit.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4d892b6a32d350acb36aee2402d4aced4e6ee5a1 --- /dev/null +++ b/components/operators/test/dbscan_unit.cpp @@ -0,0 +1,139 @@ +#include <catch.hpp> +#include <random> + + +#include <opencv2/core.hpp> +#include <ftl/algorithms/dbscan.hpp> + +#include <ftl/profiler.hpp> + +#include "data.hpp" + +using std::vector; + +template<typename T> +static vector<size_t> linearSearch(const vector<T> &points, size_t idx, float radius) { + vector<size_t> neighbors; + for (auto i = 0u; i < points.size(); i++) { + if (i == idx) { + continue; + } + if (cv::norm(points[idx] - points[i]) < radius) { + neighbors.push_back(i); + } + } + return neighbors; +} + +TEST_CASE("DBSCAN 3D clustering (linear search)") { + vector<cv::Vec3f> points { + {1.0,2.1,3.0}, + {1.0,1.9,3.0}, + {1.0,2.0,3.0}, + {1.0,1.9,3.0}, + {1.0,2.1,3.0}, + + {3.0,2.1,1.0}, + {3.0,2.0,1.0}, + {3.0,2.0,1.0}, + {3.0,2.0,1.0}, + {3.0,1.9,1.0} + }; + + vector<cv::Vec3f> centroids; + vector<short> labels; + ftl::dbscan<cv::Vec3f>(points, linearSearch<cv::Vec3f>, 3, 1.0f, labels, centroids); + + REQUIRE(centroids.size() == 2); + REQUIRE(centroids[0] == cv::Vec3f(1,2,3)); + REQUIRE(centroids[1] == cv::Vec3f(3,2,1)); +} + +TEST_CASE("DBSCAN 3D clustering (random points)") { + + std::random_device rd; + std::mt19937::result_type seed = rd(); + + vector<cv::Vec3f> true_centroids = { + { 1, 5, 3}, + { 3, 5, 1}, + { 0, 0, 0}, + { 3, 3, 3}, + {-3,-3,-3}, + { 7, 7, 7}, + {-7,-7,-7}, + }; + + int n_points = 16; + float sigma = 0.33; + float eps = sigma; // error threshold for test case + + vector<cv::Vec3f> points; + std::mt19937 gen(seed); + + for (const auto &c : true_centroids) { + std::normal_distribution<float> x{c[0], sigma}; + std::normal_distribution<float> y{c[1], sigma}; + std::normal_distribution<float> z{c[2], sigma}; + + for (int i = 0; i < n_points; i++) { + points.push_back({x(gen), y(gen), z(gen)}); + } + } + + vector<cv::Vec3f> centroids; + vector<short> labels; + ftl::dbscan<cv::Vec3f>(points, linearSearch<cv::Vec3f>, 8, 1.0f, labels, centroids); + + REQUIRE(centroids.size() == true_centroids.size()); + for (unsigned i = 0; i < true_centroids.size(); i++) { + // assumes same order as points were added (no shuffle) + REQUIRE(cv::norm(centroids[i] - true_centroids[i]) < eps); + } +} + +TEST_CASE("DBSCAN 2D clustering (noisy moons)") { + + vector<cv::Vec2f> centroids; + vector<short> labels; + { + //ftl::Profiler __profile(__func__, "DBSCAN 1500 points linear search", 0); + //__profile.verbosity(1); + + // ~ 10ms (release) + ftl::dbscan<cv::Vec2f>(noisy_moons, linearSearch<cv::Vec2f>, 5, 0.2f, labels, centroids); + } + + // assumes clustering returns same labels each time + REQUIRE(centroids.size() == 2); + REQUIRE(cv::norm(centroids[0] - cv::Vec2f(1.0, 0.0)) < 0.15); // 0.13359162681252454 + REQUIRE(cv::norm(centroids[1] - cv::Vec2f(0.0, 0.5)) < 0.15); // 0.13651460122147505 + + for (unsigned i = 0; i < labels.size(); i++) { + if (labels[i] < 0) continue; // label: NOISE + REQUIRE(labels[i] == noisy_moons_labels[i]); + } +} + +TEST_CASE("DBSCAN 2D clustering (noisy circles)") { + + vector<cv::Vec2f> centroids; + vector<short> labels; + { + //ftl::Profiler __profile(__func__, "DBSCAN 1500 points linear search", 0); + //__profile.verbosity(1); + + // ~10ms (release) + ftl::dbscan<cv::Vec2f>(noisy_circles, linearSearch<cv::Vec2f>, 5, 0.1f, labels, centroids); + } + + // assumes clustering returns same labels each time + REQUIRE(centroids.size() == 2); + REQUIRE(cv::norm(centroids[0]) < 0.01); // 0.0008899436718976423 + REQUIRE(cv::norm(centroids[0]) < 0.01); // 0.0014477936451883612 + for (unsigned i = 0; i < labels.size(); i++) { + if (labels[i] < 0) continue; // label: NOISE + REQUIRE(labels[i] == noisy_circles_labels[i]); + } +} + diff --git a/components/operators/test/tests.cpp b/components/operators/test/tests.cpp new file mode 100644 index 0000000000000000000000000000000000000000..178916eab8b9c7aabb87ff99894b48443ad6ecb6 --- /dev/null +++ b/components/operators/test/tests.cpp @@ -0,0 +1,3 @@ +#define CATCH_CONFIG_MAIN +#include "catch.hpp" +