diff --git a/src/tests/covisualization/large-cocluster-recomputing.ts b/src/tests/covisualization/large-cocluster-recomputing.ts new file mode 100644 index 00000000..8b362fb2 --- /dev/null +++ b/src/tests/covisualization/large-cocluster-recomputing.ts @@ -0,0 +1,3303 @@ +import { TestBed } from '@angular/core/testing'; +import { AppService } from '@khiops-covisualization/providers/app.service'; +import { DimensionsDatasService } from '@khiops-covisualization/providers/dimensions-datas.service'; +import { HttpClientModule } from '@angular/common/http'; +import { TreenodesService } from '@khiops-covisualization/providers/treenodes.service'; +import { DimensionsDatasVO } from '@khiops-covisualization/model/dimensions-data-vo'; +import { AppConfig } from 'src/environments/environment'; +let appService: AppService; +let treenodesService: TreenodesService; +let dimensionsDatasService: DimensionsDatasService; + +describe('CoVisualization', () => { + describe('Loading large coclustering [donotworkk10.1.1_id_feat_nospace_Coclustering.json]', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientModule], + }); + + treenodesService = TestBed.inject(TreenodesService); + appService = TestBed.inject(AppService); + dimensionsDatasService = TestBed.inject(DimensionsDatasService); + const fileDatas = require('../../assets/mocks/kc/donotworkk10.1.1_id_feat_nospace_Coclustering.json'); + appService.setFileDatas(fileDatas); + }); + + it('Loading large coclustering: isBigJsonFile must return true', () => { + const isBigJsonFile = appService.isBigJsonFile(); + expect(isBigJsonFile).toEqual(true); + }); + + it('Loading large coclustering: initial datas must be valid', () => { + dimensionsDatasService.getDimensions(); + dimensionsDatasService.initSelectedDimensions(); + dimensionsDatasService.saveInitialDimension(); + dimensionsDatasService.constructDimensionsTrees(); + + const dimensionsDatas: DimensionsDatasVO = + dimensionsDatasService.getDatas(); + + expect(dimensionsDatas.cellPartIndexes.length).toEqual(45057); + expect(dimensionsDatas.cellPartIndexes[0]).toEqual([1201, 624]); + expect(dimensionsDatas.currentDimensionsClusters[0].length).toEqual(5071); + expect(dimensionsDatas.currentDimensionsClusters[0][0].bounds).toEqual( + '{1040, 1719, 1720}', + ); + expect(dimensionsDatas.currentDimensionsClusters[1].length).toEqual(1253); + expect(dimensionsDatas.currentDimensionsClusters[1][0].bounds).toEqual( + '{feat_1209}', + ); + expect(dimensionsDatas.currentDimensionsTrees[0][0].id).toEqual(2955); + expect(dimensionsDatas.dimensions[0].initialParts).toEqual(2536); + }); + + it('Loading large coclustering: computed reduced datas must be valid', () => { + dimensionsDatasService.getDimensions(); + dimensionsDatasService.initSelectedDimensions(); + dimensionsDatasService.saveInitialDimension(); + dimensionsDatasService.constructDimensionsTrees(); + + const dimensionsDatas: DimensionsDatasVO = + dimensionsDatasService.getDatas(); + + const unfoldState = + dimensionsDatas.dimensions.length * + AppConfig.covisualizationCommon.UNFOLD_HIERARCHY.ERGONOMIC_LIMIT; + + treenodesService.setSelectedUnfoldHierarchy(unfoldState); + const collapsedNodes = treenodesService.getLeafNodesForARank(unfoldState); + treenodesService.setSavedCollapsedNodes(collapsedNodes); + let datas = treenodesService.constructSavedJson(collapsedNodes); + + expect(datas.coclusteringReport.cellFrequencies.length).toEqual(214); + expect(datas.coclusteringReport.cellPartIndexes.length).toEqual(214); + expect(datas.coclusteringReport.cellPartIndexes[0]).toEqual([14, 13]); + expect(datas.coclusteringReport.cellFrequencies[0]).toEqual(291203); + expect( + datas.coclusteringReport.dimensionHierarchies[0].clusters.length, + ).toEqual(29); + expect( + datas.coclusteringReport.dimensionHierarchies[0].clusters[0].frequency, + ).toEqual(74141); + expect( + datas.coclusteringReport.dimensionPartitions[0].valueGroups.length, + ).toEqual(15); + expect( + datas.coclusteringReport.dimensionPartitions[0].valueGroups[0].cluster, + ).toEqual('A64'); + expect(datas.coclusteringReport.dimensionSummaries[0].parts).toEqual(15); + expect(datas.coclusteringReport.summary.cells).toEqual(214); + }); + + it('Loading large coclustering: computed reduced Matrix datas datas must be valid', () => { + dimensionsDatasService.getDimensions(); + dimensionsDatasService.initSelectedDimensions(); + dimensionsDatasService.saveInitialDimension(); + dimensionsDatasService.constructDimensionsTrees(); + + const dimensionsDatas: DimensionsDatasVO = + dimensionsDatasService.getDatas(); + + const unfoldState = + dimensionsDatas.dimensions.length * + AppConfig.covisualizationCommon.UNFOLD_HIERARCHY.ERGONOMIC_LIMIT; + + treenodesService.setSelectedUnfoldHierarchy(unfoldState); + const collapsedNodes = treenodesService.getLeafNodesForARank(unfoldState); + treenodesService.setSavedCollapsedNodes(collapsedNodes); + const datasCollpased = + treenodesService.constructSavedJson(collapsedNodes); + appService.setCroppedFileDatas(datasCollpased); + + // Recompute with updated datas + dimensionsDatasService.getDimensions(); + dimensionsDatasService.initSelectedDimensions(); + dimensionsDatasService.saveInitialDimension(); + dimensionsDatasService.constructDimensionsTrees(); + + let [generationDuration, matrixDatas] = + dimensionsDatasService.getMatrixDatas(); + + expect(matrixDatas.matrixCellDatas.length).toEqual(225); + expect(matrixDatas.matrixCellDatas[0].cellFreq).toEqual(12080); + expect(matrixDatas.matrixCellDatas[0].infosMutValue).toEqual([ + 0.004023747674614358, + ]); + }); + + it('Loading large coclustering with collapsed nodes: computed reduced datas must be valid', () => { + dimensionsDatasService.getDimensions(); + dimensionsDatasService.initSelectedDimensions(); + dimensionsDatasService.saveInitialDimension(); + dimensionsDatasService.constructDimensionsTrees(); + + const datasCollpased = + treenodesService.constructSavedJson(collapsedNodes); + appService.setCroppedFileDatas(datasCollpased); + + // Recompute with updated datas + dimensionsDatasService.getDimensions(); + dimensionsDatasService.initSelectedDimensions(); + dimensionsDatasService.saveInitialDimension(); + dimensionsDatasService.constructDimensionsTrees(); + + treenodesService.setSavedCollapsedNodes(collapsedNodes); + + treenodesService.constructSavedJson(collapsedNodes); + + const dimensionsDatas: DimensionsDatasVO = + dimensionsDatasService.getDatas(); + + expect(dimensionsDatas.cellPartIndexes.length).toEqual(26); + expect(dimensionsDatas.cellPartIndexes[0]).toEqual([2, 3]); + expect(dimensionsDatas.currentDimensionsClusters[0].length).toEqual(5); + expect(dimensionsDatas.currentDimensionsClusters[0][0].bounds).toEqual( + 'A64', + ); + + expect(dimensionsDatas.currentDimensionsTrees[0][0].id).toEqual(4); + expect(dimensionsDatas.dimensions[0].initialParts).toEqual(2536); + expect(dimensionsDatas.dimensions[0].parts).toEqual(3); + }); + }); +}); + +let collapsedNodes = { + id: [ + 'A1906', + 'A1098', + 'A1962', + 'A3151', + 'A418', + 'A1860', + 'A3065', + 'A848', + 'A3019', + 'A1419', + 'A2687', + 'A64', + 'A2027', + 'A1102', + 'A1952', + 'A3015', + 'A940', + 'A1828', + 'A2378', + 'A187', + 'A2008', + 'A1155', + 'A1998', + 'A3123', + 'A531', + 'A1694', + 'A2684', + 'A918', + 'A2680', + 'A1430', + 'A2289', + 'A129', + 'A2922', + 'A1258', + 'A1985', + 'A439', + 'A2941', + 'A1879', + 'A2929', + 'A976', + 'A2802', + 'A1820', + 'A2968', + 'A125', + 'A2926', + 'A1799', + 'A2497', + 'A1117', + 'A3155', + 'A1925', + 'A3083', + 'A601', + 'A3029', + 'A1784', + 'A3084', + 'A907', + 'A2688', + 'A1509', + 'A2776', + 'A1051', + 'A1936', + 'A2591', + 'A561', + 'A1739', + 'A2650', + 'A855', + 'A2994', + 'A1574', + 'A2430', + 'A217', + 'A1108', + 'A3086', + 'A1969', + 'A607', + 'A2557', + 'A1752', + 'A2451', + 'A1029', + 'A2874', + 'A1594', + 'A2809', + 'A105', + 'A1942', + 'A920', + 'A2749', + 'A1314', + 'A2106', + 'A386', + 'A2098', + 'A1338', + 'A3152', + 'A759', + 'A2041', + 'A1313', + 'A2100', + 'A89', + 'A1520', + 'A2435', + 'A873', + 'A2305', + 'A1609', + 'A2175', + 'A647', + 'A3121', + 'A2447', + 'A1437', + 'A2530', + 'A260', + 'A2658', + 'A1626', + 'A2950', + 'A773', + 'A3146', + 'A1633', + 'A2302', + 'A41', + 'A1841', + 'A2823', + 'A1093', + 'A1946', + 'A2739', + 'A367', + 'A2727', + 'A1903', + 'A3141', + 'A1069', + 'A3118', + 'A1800', + 'A2984', + 'A587', + 'A2825', + 'A1620', + 'A2498', + 'A1068', + 'A2547', + 'A1930', + 'A3112', + 'A249', + 'A2565', + 'A1647', + 'A2207', + 'A886', + 'A3055', + 'A1823', + 'A3033', + 'A551', + 'A2023', + 'A1424', + 'A2409', + 'A831', + 'A2672', + 'A1433', + 'A2123', + 'A1092', + 'A3003', + 'A1803', + 'A2875', + 'A464', + 'A2221', + 'A1206', + 'A1915', + 'A3045', + 'A84', + 'A2663', + 'A1450', + 'A2959', + 'A858', + 'A2648', + 'A1470', + 'A2369', + 'A820', + 'A1643', + 'A2578', + 'A360', + 'A1806', + 'A2993', + 'A723', + 'A1780', + 'A2521', + 'A76', + 'A1959', + 'A3137', + 'A1077', + 'A1886', + 'A2549', + 'A45', + 'A1859', + 'A2979', + 'A1134', + 'A2184', + 'A3097', + 'A570', + 'A1773', + 'A2625', + 'A913', + 'A2942', + 'A1736', + 'A2983', + 'A251', + 'A2695', + 'A1685', + 'A2818', + 'A1161', + 'A2403', + 'A3156', + 'A546', + 'A2042', + 'A1396', + 'A2249', + 'A792', + 'A2889', + 'A1605', + 'A2178', + 'A149', + 'A2173', + 'A1845', + 'A2785', + 'A775', + 'A3043', + 'A1389', + 'A2201', + 'A371', + 'A2131', + 'A1420', + 'A2844', + 'A799', + 'A2268', + 'A1417', + 'A2014', + 'A542', + 'A2036', + 'A1614', + 'A2773', + 'A961', + 'A2577', + 'A1794', + 'A2859', + 'A78', + 'A1721', + 'A2182', + 'A1074', + 'A2988', + 'A1834', + 'A2978', + 'A572', + 'A2513', + 'A1686', + 'A2856', + 'A1015', + 'A2860', + 'A1790', + 'A2963', + 'A357', + 'A1772', + 'A2755', + 'A876', + 'A2351', + 'A1764', + 'A2835', + 'A471', + 'A2779', + 'A1618', + 'A2697', + 'A1030', + 'A2698', + 'A1742', + 'A3154', + 'A218', + 'A1994', + 'A1264', + 'A1957', + 'A798', + 'A2500', + 'A1854', + 'A2766', + 'A425', + 'A2044', + 'A1327', + 'A2141', + 'A757', + 'A2043', + 'A1374', + 'A2161', + 'A185', + 'A2013', + 'A1171', + 'A1968', + 'A789', + 'A1978', + 'A1319', + 'A2077', + 'A448', + 'A2122', + 'A1296', + 'A2033', + 'A1013', + 'A2623', + 'A1564', + 'A2322', + 'A316', + 'A2774', + 'A1846', + 'A2909', + 'A1058', + 'A2885', + 'A1536', + 'A3157', + 'A591', + 'A2738', + 'A1410', + 'A2257', + 'A916', + 'A2649', + 'A1759', + 'A3098', + 'A103', + 'A1444', + 'A2463', + 'A851', + 'A2405', + 'A1342', + 'A2062', + 'A525', + 'A2020', + 'A1398', + 'A2293', + 'A928', + 'A2180', + 'A1504', + 'A2492', + 'A325', + 'A3028', + 'A1091', + 'A2335', + 'A1576', + 'A2295', + 'A602', + 'A2627', + 'A1677', + 'A2462', + 'A964', + 'A2520', + 'A1735', + 'A2582', + 'A403', + 'A2970', + 'A1345', + 'A2252', + 'A867', + 'A2900', + 'A1655', + 'A2899', + 'A203', + 'A1990', + 'A1312', + 'A2061', + 'A864', + 'A2439', + 'A1676', + 'A2696', + 'A467', + 'A2793', + 'A1680', + 'A2873', + 'A945', + 'A3032', + 'A1678', + 'A2348', + 'A29', + 'A3158', + 'A1123', + 'A2759', + 'A1837', + 'A3016', + 'A502', + 'A1931', + 'A3115', + 'A1128', + 'A3134', + 'A1898', + 'A2896', + 'A800', + 'A2308', + 'A1890', + 'A3042', + 'A172', + 'A1884', + 'A2613', + 'A1089', + 'A2981', + 'A1778', + 'A3052', + 'A567', + 'A2395', + 'A1540', + 'A2360', + 'A977', + 'A3143', + 'A1607', + 'A2621', + 'A320', + 'A3110', + 'A1935', + 'A2590', + 'A1056', + 'A2916', + 'A1561', + 'A2619', + 'A584', + 'A2278', + 'A1689', + 'A2721', + 'A924', + 'A2169', + 'A1530', + 'A2964', + 'A1838', + 'A2614', + 'A815', + 'A1965', + 'A2473', + 'A100', + 'A1391', + 'A2003', + 'A774', + 'A2090', + 'A1434', + 'A2952', + 'A290', + 'A2291', + 'A1277', + 'A2028', + 'A630', + 'A3012', + 'A1402', + 'A2328', + 'A34', + 'A1940', + 'A862', + 'A1982', + 'A1324', + 'A2704', + 'A180', + 'A3014', + 'A1360', + 'A2320', + 'A668', + 'A2834', + 'A1531', + 'A2398', + 'A80', + 'A2791', + 'A1463', + 'A2079', + 'A826', + 'A2792', + 'A1887', + 'A3047', + 'A318', + 'A3130', + 'A1808', + 'A3095', + 'A966', + 'A2584', + 'A1688', + 'A2512', + 'A1941', + 'A3049', + 'A1116', + 'A1954', + 'A81', + 'A2424', + 'A1115', + 'A1844', + 'A3125', + 'A447', + 'A1057', + 'A3129', + 'A1589', + 'A2419', + 'A31', + 'A1905', + 'A2940', + 'A838', + 'A2701', + 'A1584', + 'A2071', + 'A460', + 'A1731', + 'A2784', + 'A919', + 'A2264', + 'A1464', + 'A2163', + 'A93', + 'A2518', + 'A1011', + 'A1682', + 'A2310', + 'A385', + 'A2154', + 'A1370', + 'A2045', + 'A807', + 'A2000', + 'A1293', + 'A2652', + 'A166', + 'A1700', + 'A2830', + 'A971', + 'A2681', + 'A1787', + 'A3061', + 'A408', + 'A2366', + 'A1872', + 'A2918', + 'A923', + 'A2880', + 'A1754', + 'A2892', + 'A73', + 'A1949', + 'A2647', + 'A898', + 'A1849', + 'A2475', + 'A412', + 'A2585', + 'A1441', + 'A2870', + 'A829', + 'A2694', + 'A1560', + 'A2597', + 'A141', + 'A1928', + 'A2887', + 'A1009', + 'A2664', + 'A1802', + 'A2923', + 'A589', + 'A3119', + 'A1918', + 'A2757', + 'A1038', + 'A2551', + 'A1779', + 'A2886', + 'A302', + 'A2349', + 'A1436', + 'A2080', + 'A809', + 'A2397', + 'A1454', + 'A2393', + 'A505', + 'A2471', + 'A1603', + 'A2516', + 'A965', + 'A3017', + 'A1897', + 'A3038', + 'A44', + 'A1414', + 'A2104', + 'A1000', + 'A1908', + 'A2747', + 'A286', + 'A2040', + 'A1421', + 'A2321', + 'A824', + 'A2538', + 'A1490', + 'A2359', + 'A111', + 'A1601', + 'A2086', + 'A1005', + 'A1867', + 'A2537', + 'A441', + 'A2368', + 'A1348', + 'A3008', + 'A842', + 'A2186', + 'A1388', + 'A2422', + 'A196', + 'A1478', + 'A2153', + 'A803', + 'A2671', + 'A1732', + 'A3116', + 'A451', + 'A2796', + 'A1783', + 'A2573', + 'A868', + 'A3138', + 'A1878', + 'A2804', + 'A86', + 'A1836', + 'A3093', + 'A847', + 'A2915', + 'A1649', + 'A2196', + 'A490', + 'A2939', + 'A1366', + 'A2820', + 'A891', + 'A2412', + 'A1619', + 'A2902', + 'A208', + 'A1286', + 'A1966', + 'A819', + 'A2277', + 'A1527', + 'A2864', + 'A431', + 'A1972', + 'A1299', + 'A2010', + 'A787', + 'A2506', + 'A1497', + 'A2082', + 'A285', + 'A1585', + 'A2357', + 'A777', + 'A2235', + 'A1412', + 'A2069', + 'A509', + 'A2068', + 'A1482', + 'A2150', + 'A911', + 'A2112', + 'A1317', + 'A2553', + 'A120', + 'A1625', + 'A2847', + 'A802', + 'A2415', + 'A1645', + 'A2866', + 'A384', + 'A2995', + 'A1086', + 'A3126', + 'A1727', + 'A2493', + 'A553', + 'A2383', + 'A1635', + 'A2118', + 'A896', + 'A2445', + 'A1821', + 'A2932', + 'A237', + 'A1989', + 'A1353', + 'A2474', + 'A761', + 'A2358', + 'A1518', + 'A2307', + 'A452', + 'A2550', + 'A1472', + 'A2298', + 'A877', + 'A3106', + 'A1840', + 'A2592', + 'A152', + 'A2226', + 'A1438', + 'A2051', + 'A850', + 'A2355', + 'A1519', + 'A2526', + 'A454', + 'A2346', + 'A1440', + 'A2025', + 'A784', + 'A2211', + 'A1349', + 'A2502', + 'A268', + 'A1953', + 'A1373', + 'A2470', + 'A823', + 'A2294', + 'A1458', + 'A2272', + 'A415', + 'A2507', + 'A1399', + 'A2316', + 'A926', + 'A2583', + 'A1868', + 'A3037', + 'A1920', + 'A743', + 'A2645', + 'A1480', + 'A2986', + 'A411', + 'A2446', + 'A1656', + 'A2827', + 'A1113', + 'A2849', + 'A1889', + 'A3004', + 'A283', + 'A1858', + 'A2279', + 'A845', + 'A2074', + 'A1297', + 'A2031', + 'A557', + 'A3082', + 'A1924', + 'A2925', + 'A1060', + 'A2822', + 'A1880', + 'A3077', + 'A243', + 'A1945', + 'A2877', + 'A1042', + 'A2602', + 'A1670', + 'A2595', + 'A453', + 'A2026', + 'A1295', + 'A1987', + 'A726', + 'A2571', + 'A1442', + 'A2137', + 'A1960', + 'A903', + 'A1707', + 'A2824', + 'A623', + 'A2670', + 'A1947', + 'A3099', + 'A1104', + 'A3070', + 'A1453', + 'A2336', + 'A116', + 'A1207', + 'A2075', + 'A724', + 'A2370', + 'A1306', + 'A2503', + 'A205', + 'A2961', + 'A1320', + 'A2543', + 'A639', + 'A2826', + 'A1351', + 'A2371', + 'A47', + 'A1848', + 'A2228', + 'A870', + 'A2771', + 'A1630', + 'A2936', + 'A569', + 'A1913', + 'A2617', + 'A994', + 'A2072', + 'A1387', + 'A2191', + 'A322', + 'A1863', + 'A2794', + 'A1049', + 'A2837', + 'A1749', + 'A2867', + 'A550', + 'A2385', + 'A1573', + 'A2546', + 'A889', + 'A2622', + 'A1760', + 'A2514', + 'A210', + 'A2002', + 'A1262', + 'A1977', + 'A751', + 'A2037', + 'A1326', + 'A2091', + 'A428', + 'A2842', + 'A1583', + 'A2450', + 'A859', + 'A2482', + 'A1629', + 'A2396', + 'A112', + 'A1447', + 'A2059', + 'A747', + 'A2985', + 'A1322', + 'A2015', + 'A475', + 'A2143', + 'A1341', + 'A2496', + 'A797', + 'A2736', + 'A1600', + 'A2891', + 'A289', + 'A2097', + 'A1522', + 'A2510', + 'A828', + 'A2113', + 'A1362', + 'A2536', + 'A516', + 'A3051', + 'A1506', + 'A2227', + 'A888', + 'A2304', + 'A1455', + 'A2431', + 'A198', + 'A2136', + 'A1271', + 'A2646', + 'A646', + 'A2172', + 'A1382', + 'A2132', + 'A388', + 'A2030', + 'A1428', + 'A2237', + 'A840', + 'A2238', + 'A1311', + 'A2142', + 'A79', + 'A1409', + 'A2574', + 'A866', + 'A2255', + 'A1435', + 'A2102', + 'A424', + 'A1964', + 'A1400', + 'A3075', + 'A793', + 'A2011', + 'A1413', + 'A2567', + 'A306', + 'A2760', + 'A1766', + 'A2962', + 'A969', + 'A2769', + 'A1871', + 'A2996', + 'A162', + 'A2103', + 'A1337', + 'A1993', + 'A717', + 'A1988', + 'A1369', + 'A2756', + 'A253', + 'A2389', + 'A1582', + 'A2299', + 'A860', + 'A2920', + 'A1718', + 'A2653', + 'A534', + 'A2838', + 'A1650', + 'A2634', + 'A991', + 'A3090', + 'A1785', + 'A2783', + 'A1061', + 'A2313', + 'A1558', + 'A2598', + 'A580', + 'A1274', + 'A3072', + 'A1950', + 'A3124', + 'A212', + 'A2197', + 'A1681', + 'A2958', + 'A695', + 'A2060', + 'A1275', + 'A2750', + 'A98', + 'A1893', + 'A2710', + 'A788', + 'A2179', + 'A1361', + 'A2420', + 'A368', + 'A2230', + 'A1675', + 'A3066', + 'A781', + 'A2768', + 'A1333', + 'A2601', + 'A43', + 'A1012', + 'A1555', + 'A2855', + 'A523', + 'A1492', + 'A2258', + 'A953', + 'A2714', + 'A1734', + 'A2609', + 'A229', + 'A1033', + 'A2957', + 'A1615', + 'A2427', + 'A518', + 'A3035', + 'A1426', + 'A2236', + 'A904', + 'A2639', + 'A1705', + 'A2183', + 'A178', + 'A1763', + 'A2593', + 'A742', + 'A2624', + 'A1666', + 'A2303', + 'A493', + 'A2190', + 'A1586', + 'A2562', + 'A1022', + 'A2432', + 'A1687', + 'A2373', + 'A374', + 'A2296', + 'A1386', + 'A2343', + 'A973', + 'A2737', + 'A1648', + 'A2600', + 'A568', + 'A2626', + 'A1496', + 'A2637', + 'A979', + 'A2464', + 'A1746', + 'A2745', + 'A127', + 'A1662', + 'A2633', + 'A872', + 'A3109', + 'A1634', + 'A2977', + 'A530', + 'A1679', + 'A2260', + 'A939', + 'A2399', + 'A1861', + 'A2917', + 'A280', + 'A1729', + 'A3056', + 'A846', + 'A2007', + 'A1698', + 'A3030', + 'A377', + 'A2312', + 'A1692', + 'A2548', + 'A879', + 'A2851', + 'A1914', + 'A2934', + 'A168', + 'A1477', + 'A2253', + 'A1010', + 'A2908', + 'A1813', + 'A2390', + 'A488', + 'A2311', + 'A1671', + 'A2690', + 'A988', + 'A2703', + 'A1894', + 'A2884', + 'A339', + 'A3079', + 'A1642', + 'A3023', + 'A839', + 'A2675', + 'A1579', + 'A2683', + 'A135', + 'A1765', + 'A2070', + 'A982', + 'A3120', + 'A1500', + 'A2188', + 'A519', + 'A2067', + 'A1486', + 'A3108', + 'A861', + 'A2459', + 'A1371', + 'A2566', + 'A274', + 'A2333', + 'A1709', + 'A2717', + 'A844', + 'A2206', + 'A1457', + 'A3094', + 'A457', + 'A2780', + 'A1483', + 'A2876', + 'A980', + 'A2465', + 'A1717', + 'A3013', + 'A67', + 'A1948', + 'A2982', + 'A1073', + 'A3133', + 'A1789', + 'A2421', + 'A491', + 'A2726', + 'A1556', + 'A2125', + 'A795', + 'A2677', + 'A1944', + 'A3073', + 'A148', + 'A2203', + 'A1301', + 'A2021', + 'A752', + 'A2219', + 'A1523', + 'A2478', + 'A409', + 'A2795', + 'A1372', + 'A2168', + 'A885', + 'A2971', + 'A1697', + 'A2852', + 'A277', + 'A3148', + 'A2050', + 'A1174', + 'A2782', + 'A1815', + 'A3107', + 'A575', + 'A2174', + 'A1812', + 'A2946', + 'A1023', + 'A2751', + 'A1892', + 'A3160', + 'A90', + 'A1895', + 'A3002', + 'A1048', + 'A3159', + 'A1833', + 'A2743', + 'A470', + 'A3078', + 'A1805', + 'A2456', + 'A992', + 'A2839', + 'A1826', + 'A2569', + 'A156', + 'A2029', + 'A1532', + 'A2883', + 'A690', + 'A2966', + 'A1851', + 'A2787', + 'A1084', + 'A2659', + 'A1488', + 'A2248', + 'A327', + 'A2728', + 'A1541', + 'A2713', + 'A959', + 'A2317', + 'A1510', + 'A2392', + 'A521', + 'A2315', + 'A1508', + 'A2159', + 'A995', + 'A2863', + 'A1737', + 'A2808', + 'A3067', + 'A1036', + 'A3085', + 'A1919', + 'A3113', + 'A576', + 'A2407', + 'A1281', + 'A2505', + 'A764', + 'A2788', + 'A1598', + 'A2610', + 'A292', + 'A1755', + 'A2426', + 'A909', + 'A2092', + 'A1667', + 'A3140', + 'A504', + 'A1888', + 'A2789', + 'A1020', + 'A3039', + 'A1730', + 'A2352', + 'A138', + 'A2326', + 'A1646', + 'A2912', + 'A933', + 'A2218', + 'A1460', + 'A2117', + 'A528', + 'A2484', + 'A1473', + 'A2560', + 'A954', + 'A2309', + 'A1809', + 'A3054', + 'A355', + 'A3069', + 'A1876', + 'A2712', + 'A968', + 'A2388', + 'A1623', + 'A3091', + 'A583', + 'A2965', + 'A1911', + 'A2691', + 'A999', + 'A2535', + 'A1870', + 'A2935', + 'A54', + 'A1276', + 'A1967', + 'A836', + 'A2662', + 'A1909', + 'A3142', + 'A358', + 'A1943', + 'A2999', + 'A1025', + 'A3104', + 'A1502', + 'A2147', + 'A69', + 'A1774', + 'A3000', + 'A1032', + 'A2156', + 'A1804', + 'A2522', + 'A563', + 'A2725', + 'A1917', + 'A2651', + 'A948', + 'A2655', + 'A1712', + 'A2973', + 'A294', + 'A3150', + 'A1891', + 'A2479', + 'A934', + 'A2231', + 'A1493', + 'A2437', + 'A477', + 'A2314', + 'A1552', + 'A2815', + 'A890', + 'A2572', + 'A1588', + 'A2416', + 'A200', + 'A1921', + 'A3096', + 'A1100', + 'A2928', + 'A1835', + 'A2404', + 'A609', + 'A2380', + 'A1644', + 'A2821', + 'A1039', + 'A2160', + 'A1713', + 'A2564', + 'A379', + 'A2356', + 'A1636', + 'A2797', + 'A1027', + 'A2882', + 'A1753', + 'A2706', + 'A605', + 'A2969', + 'A1811', + 'A2682', + 'A975', + 'A2554', + 'A1726', + 'A2720', + 'A1720', + 'A2711', + 'A882', + 'A1850', + 'A3018', + 'A52', + 'A2881', + 'A1063', + 'A2544', + 'A1411', + 'A3131', + 'A267', + 'A1923', + 'A2638', + 'A816', + 'A2604', + 'A1853', + 'A3044', + 'A1801', + 'A2442', + 'A996', + 'A2910', + 'A1796', + 'A2436', + 'A608', + 'A2643', + 'A1559', + 'A2752', + 'A1076', + 'A3087', + 'A1714', + 'A2509', + 'A348', + 'A1819', + 'A3062', + 'A1059', + 'A3060', + 'A1883', + 'A2927', + 'A536', + 'A2387', + 'A1632', + 'A2831', + 'A1001', + 'A2192', + 'A1606', + 'A2719', + 'A224', + 'A2955', + 'A1406', + 'A2217', + 'A768', + 'A2076', + 'A1499', + 'A2167', + 'A331', + 'A2181', + 'A1505', + 'A2233', + 'A989', + 'A3046', + 'A1839', + 'A3074', + 'A190', + 'A1904', + 'A2152', + 'A956', + 'A3088', + 'A1512', + 'A2640', + 'A632', + 'A2468', + 'A1640', + 'A2709', + 'A1071', + 'A2786', + 'A1907', + 'A3027', + 'A343', + 'A2004', + 'A1554', + 'A2414', + 'A915', + 'A2893', + 'A1315', + 'A2048', + 'A500', + 'A2400', + 'A1494', + 'A2149', + 'A962', + 'A2753', + 'A1824', + 'A2848', + 'A158', + 'A1816', + 'A2246', + 'A1090', + 'A2933', + 'A1757', + 'A2803', + 'A511', + 'A2541', + 'A1704', + 'A2930', + 'A749', + 'A2283', + 'A1422', + 'A2524', + 'A279', + 'A2501', + 'A1599', + 'A2868', + 'A960', + 'A2376', + 'A1590', + 'A2438', + 'A465', + 'A3145', + 'A1934', + 'A2735', + 'A970', + 'A2330', + 'A1695', + 'A2679', + 'A1929', + 'A3026', + 'A834', + 'A2642', + 'A1448', + 'A2095', + 'A192', + 'A1339', + 'A1991', + 'A718', + 'A2960', + 'A1652', + 'A2223', + 'A63', + 'A1344', + 'A1980', + 'A741', + 'A2904', + 'A1270', + 'A2078', + 'A436', + 'A1403', + 'A2466', + 'A730', + 'A2561', + 'A1418', + 'A1981', + 'A247', + 'A1958', + 'A1335', + 'A2049', + 'A728', + 'A1979', + 'A1393', + 'A2185', + 'A429', + 'A2058', + 'A1456', + 'A2327', + 'A812', + 'A2954', + 'A1798', + 'A3053', + 'A174', + 'A2234', + 'A1305', + 'A2135', + 'A713', + 'A3041', + 'A1691', + 'A2452', + 'A364', + 'A2943', + 'A1309', + 'A2099', + 'A821', + 'A2171', + 'A1461', + 'A2453', + 'A142', + 'A1471', + 'A2157', + 'A1052', + 'A2542', + 'A1847', + 'A2853', + 'A560', + 'A2250', + 'A1654', + 'A2458', + 'A863', + 'A2270', + 'A1537', + 'A2854', + 'A160', + 'A1976', + 'A1285', + 'A1974', + 'A796', + 'A2285', + 'A1449', + 'A1961', + 'A478', + 'A2035', + 'A1340', + 'A2111', + 'A732', + 'A2057', + 'A1316', + 'A2121', + 'A326', + 'A2391', + 'A1290', + 'A2134', + 'A780', + 'A1973', + 'A1310', + 'A2022', + 'A463', + 'A2145', + 'A1377', + 'A2088', + 'A805', + 'A2124', + 'A1332', + 'A1975', + 'A240', + 'A1992', + 'A1468', + 'A3007', + 'A998', + 'A3114', + 'A1336', + 'A2053', + 'A438', + 'A2241', + 'A1684', + 'A2620', + 'A825', + 'A2286', + 'A1498', + 'A2055', + 'A36', + 'A1866', + 'A2741', + 'A906', + 'A3089', + 'A1595', + 'A2460', + 'A455', + 'A1852', + 'A3111', + 'A1070', + 'A2914', + 'A1690', + 'A2669', + 'A594', + 'A2193', + 'A1427', + 'A3153', + 'A993', + 'A2263', + 'A1818', + 'A3058', + 'A228', + 'A1864', + 'A2888', + 'A833', + 'A2897', + 'A1885', + 'A2209', + 'A617', + 'A2588', + 'A1899', + 'A3136', + 'A1035', + 'A3076', + 'A1740', + 'A2678', + 'A118', + 'A2798', + 'A1378', + 'A2489', + 'A740', + 'A3001', + 'A1495', + 'A2587', + 'A61', + 'A1604', + 'A2262', + 'A990', + 'A2401', + 'A1568', + 'A2723', + 'A413', + 'A2009', + 'A1329', + 'A2087', + 'A785', + 'A2729', + 'A1521', + 'A3010', + 'A202', + 'A3036', + 'A1008', + 'A2402', + 'A1664', + 'A2730', + 'A404', + 'A2202', + 'A1379', + 'A2440', + 'A779', + 'A2716', + 'A1432', + 'A2133', + 'A254', + 'A2740', + 'A1367', + 'A2425', + 'A958', + 'A2410', + 'A1580', + 'A2700', + 'A514', + 'A2129', + 'A1469', + 'A2629', + 'A987', + 'A2222', + 'A1706', + 'A2485', + 'A108', + 'A3059', + 'A1078', + 'A2998', + 'A1900', + 'A2511', + 'A574', + 'A2128', + 'A1380', + 'A2599', + 'A927', + 'A2742', + 'A1668', + 'A2406', + 'A314', + 'A3024', + 'A1575', + 'A2345', + 'A936', + 'A2144', + 'A1781', + 'A2937', + 'A484', + 'A2570', + 'A1416', + 'A2107', + 'A905', + 'A2155', + 'A1771', + 'A2945', + 'A239', + 'A2718', + 'A1343', + 'A2274', + 'A931', + 'A2693', + 'A1602', + 'A2841', + 'A474', + 'A2198', + 'A1562', + 'A2532', + 'A1018', + 'A2761', + 'A1810', + 'A2529', + 'A38', + 'A1543', + 'A1996', + 'A734', + 'A2661', + 'A1323', + 'A2951', + 'A220', + 'A1663', + 'A2931', + 'A755', + 'A2949', + 'A1756', + 'A3048', + 'A83', + 'A1443', + 'A2339', + 'A699', + 'A3080', + 'A1350', + 'A2032', + 'A401', + 'A1395', + 'A2216', + 'A893', + 'A2762', + 'A1683', + 'A2944', + 'A133', + 'A1927', + 'A2764', + 'A1047', + 'A2879', + 'A1581', + 'A2744', + 'A400', + 'A1795', + 'A2924', + 'A1034', + 'A2732', + 'A1743', + 'A2754', + 'A555', + 'A2381', + 'A1770', + 'A2989', + 'A1014', + 'A2490', + 'A1747', + 'A2829', + 'A263', + 'A2372', + 'A1768', + 'A2813', + 'A972', + 'A2284', + 'A1711', + 'A3040', + 'A506', + 'A3132', + 'A1462', + 'A2120', + 'A922', + 'A2256', + 'A1547', + 'A2581', + 'A50', + 'A1926', + 'A2781', + 'A1007', + 'A2476', + 'A1725', + 'A2872', + 'A350', + 'A1572', + 'A2151', + 'A949', + 'A2947', + 'A1831', + 'A2956', + 'A538', + 'A2857', + 'A1875', + 'A3102', + 'A986', + 'A3100', + 'A1782', + 'A2836', + 'A223', + 'A1932', + 'A3057', + 'A869', + 'A2630', + 'A1777', + 'A2921', + 'A462', + 'A3105', + 'A1503', + 'A2382', + 'A1072', + 'A3081', + 'A1937', + 'A2722', + 'A122', + 'A2254', + 'A1346', + 'A2047', + 'A786', + 'A2748', + 'A1550', + 'A2165', + 'A458', + 'A1970', + 'A1352', + 'A2527', + 'A871', + 'A2767', + 'A1514', + 'A2499', + 'A304', + 'A2448', + 'A1303', + 'A2208', + 'A811', + 'A2269', + 'A1551', + 'A3031', + 'A499', + 'A2130', + 'A1526', + 'A2515', + 'A894', + 'A2559', + 'A1719', + 'A2340', + 'A259', + 'A2976', + 'A1489', + 'A2816', + 'A738', + 'A3005', + 'A1814', + 'A2605', + 'A539', + 'A2674', + 'A1822', + 'A2654', + 'A921', + 'A2628', + 'A1702', + 'A2911', + 'A281', + 'A2434', + 'A1479', + 'A2707', + 'A950', + 'A2384', + 'A1613', + 'A2486', + 'A512', + 'A2980', + 'A1751', + 'A2845', + 'A974', + 'A2205', + 'A1843', + 'A2991', + 'A1939', + 'A2990', + 'A682', + 'A2777', + 'A1825', + 'A3135', + 'A232', + 'A2472', + 'A1549', + 'A2799', + 'A830', + 'A3117', + 'A1445', + 'A2805', + 'A334', + 'A2194', + 'A1292', + 'A2170', + 'A790', + 'A2005', + 'A1467', + 'A2758', + 'A625', + 'A2665', + 'A1856', + 'A3034', + 'A1028', + 'A2342', + 'A1708', + 'A2715', + 'A57', + 'A1769', + 'A2850', + 'A912', + 'A2367', + 'A1484', + 'A2635', + 'A391', + 'A2586', + 'A1501', + 'A2491', + 'A746', + 'A2332', + 'A1546', + 'A2972', + 'A238', + 'A1971', + 'A3068', + 'A1162', + 'A2907', + 'A1938', + 'A3050', + 'A654', + 'A2938', + 'A1869', + 'A2894', + 'A1044', + 'A2772', + 'A1621', + 'A2906', + 'A1832', + 'A2297', + 'A853', + 'A2220', + 'A1381', + 'A2329', + 'A473', + 'A2323', + 'A1376', + 'A2667', + 'A766', + 'A2394', + 'A1553', + 'A2386', + 'A310', + 'A1701', + 'A2480', + 'A854', + 'A1984', + 'A1261', + 'A2504', + 'A459', + 'A2746', + 'A1358', + 'A2109', + 'A997', + 'A2276', + 'A1491', + 'A2337', + 'A188', + 'A1485', + 'A2054', + 'A910', + 'A2668', + 'A1534', + 'A2832', + 'A469', + 'A2666', + 'A1710', + 'A3011', + 'A884', + 'A2244', + 'A1439', + 'A2273', + 'A215', + 'A2001', + 'A1321', + 'A2457', + 'A756', + 'A2056', + 'A1359', + 'A2865', + 'A526', + 'A2363', + 'A1724', + 'A2948', + 'A1075', + 'A2903', + 'A1877', + 'A2817', + 'A351', + 'A2093', + 'A1524', + 'A3139', + 'A748', + 'A2417', + 'A1425', + 'A2232', + 'A109', + 'A1896', + 'A2890', + 'A967', + 'A3009', + 'A1715', + 'A2596', + 'A394', + 'A2089', + 'A1392', + 'A2775', + 'A770', + 'A2589', + 'A1593', + 'A2443', + 'A177', + 'A1452', + 'A2038', + 'A733', + 'A2878', + 'A1744', + 'A2096', + 'A449', + 'A1363', + 'A2200', + 'A832', + 'A1997', + 'A1375', + 'A2105', + 'A242', + 'A2046', + 'A1289', + 'A2240', + 'A722', + 'A2006', + 'A1364', + 'A2110', + 'A434', + 'A3021', + 'A1390', + 'A2325', + 'A813', + 'A2204', + 'A1325', + 'A2517', + 'A303', + 'A2239', + 'A1651', + 'A2523', + 'A782', + 'A1951', + 'A1357', + 'A2119', + 'A466', + 'A3127', + 'A1750', + 'A2290', + 'A1021', + 'A2689', + 'A1516', + 'A2708', + 'A165', + 'A1622', + 'A2344', + 'A908', + 'A2024', + 'A1569', + 'A2428', + 'A479', + 'A2108', + 'A1401', + 'A2187', + 'A852', + 'A2444', + 'A1617', + 'A2603', + 'A308', + 'A2301', + 'A1639', + 'A2287', + 'A806', + 'A2441', + 'A1669', + 'A2676', + 'A613', + 'A2898', + 'A1862', + 'A2778', + 'A1046', + 'A2919', + 'A1741', + 'A2615', + 'A131', + 'A1631', + 'A2189', + 'A880', + 'A2114', + 'A1476', + 'A3128', + 'A359', + 'A2481', + 'A1408', + 'A2034', + 'A760', + 'A2083', + 'A1330', + 'A2210', + 'A195', + 'A1995', + 'A1596', + 'A2148', + 'A932', + 'A2018', + 'A1365', + 'A2519', + 'A486', + 'A2365', + 'A1331', + 'A2140', + 'A951', + 'A2429', + 'A1459', + 'A2292', + 'A373', + 'A2039', + 'A1475', + 'A2085', + 'A857', + 'A2066', + 'A1384', + 'A2869', + 'A275', + 'A2146', + 'A1328', + 'A2166', + 'A901', + 'A2017', + 'A1474', + 'A2225', + 'A485', + 'A2282', + 'A1557', + 'A3063', + 'A843', + 'A2810', + 'A1728', + 'A2858', + 'A96', + 'A1466', + 'A2967', + 'A837', + 'A2660', + 'A1628', + 'A2540', + 'A544', + 'A2418', + 'A1544', + 'A2379', + 'A865', + 'A2081', + 'A1571', + 'A2611', + 'A257', + 'A1738', + 'A2656', + 'A763', + 'A2341', + 'A1535', + 'A2073', + 'A483', + 'A2556', + 'A1653', + 'A2288', + 'A944', + 'A2686', + 'A1545', + 'A2861', + 'A143', + 'A2765', + 'A1405', + 'A2261', + 'A874', + 'A2734', + 'A1465', + 'A2212', + 'A497', + 'A1955', + 'A1533', + 'A2555', + 'A946', + 'A2913', + 'A1723', + 'A2533', + 'A234', + 'A2251', + 'A1431', + 'A2997', + 'A835', + 'A3006', + 'A1865', + 'A2846', + 'A508', + 'A2214', + 'A1857', + 'A2862', + 'A981', + 'A2423', + 'A1786', + 'A2641', + 'A56', + 'A1776', + 'A2975', + 'A1085', + 'A1956', + 'A3122', + 'A227', + 'A1641', + 'A2508', + 'A938', + 'A1592', + 'A2455', + 'A481', + 'A2064', + 'A1260', + 'A2594', + 'A943', + 'A2631', + 'A1507', + 'A2433', + 'A299', + 'A1637', + 'A2350', + 'A935', + 'A2580', + 'A1830', + 'A2770', + 'A548', + 'A2019', + 'A1383', + 'A2199', + 'A818', + 'A2375', + 'A1487', + 'A3025', + 'A123', + 'A1674', + 'A2224', + 'A1004', + 'A3161', + 'A1513', + 'A2158', + 'A420', + 'A2495', + 'A1597', + 'A2016', + 'A942', + 'A2259', + 'A1446', + 'A2487', + 'A270', + 'A1570', + 'A2483', + 'A791', + 'A2324', + 'A1415', + 'A2063', + 'A507', + 'A2563', + 'A1673', + 'A2833', + 'A1050', + 'A2699', + 'A1901', + 'A2987', + 'A154', + 'A1829', + 'A2814', + 'A1006', + 'A2974', + 'A1627', + 'A2525', + 'A496', + 'A2724', + 'A1661', + 'A2607', + 'A1016', + 'A2673', + 'A1542', + 'A2840', + 'A245', + 'A2281', + 'A1308', + 'A2127', + 'A897', + 'A2812', + 'A1587', + 'A3103', + 'A445', + 'A2012', + 'A1429', + 'A2558', + 'A817', + 'A2579', + 'A1612', + 'A2905', + 'A338', + 'A2539', + 'A1762', + 'A2806', + 'A929', + 'A2138', + 'A1716', + 'A2632', + 'A556', + 'A2616', + 'A1566', + 'A2101', + 'A925', + 'A2731', + 'A1611', + 'A2411', + 'A74', + 'A1528', + 'A2811', + 'A895', + 'A2094', + 'A1548', + 'A2618', + 'A440', + 'A2162', + 'A1394', + 'A2084', + 'A753', + 'A2164', + 'A1355', + 'A2408', + 'A296', + 'A2331', + 'A1356', + 'A2300', + 'A963', + 'A2065', + 'A1539', + 'A2361', + 'A402', + 'A2347', + 'A1672', + 'A2413', + 'A892', + 'A2488', + 'A1610', + 'A3101', + 'A145', + 'A1616', + 'A2334', + 'A917', + 'A2608', + 'A1807', + 'A2819', + 'A503', + 'A1761', + 'A2828', + 'A1003', + 'A2692', + 'A1665', + 'A2318', + 'A311', + 'A2265', + 'A1624', + 'A2843', + 'A827', + 'A2052', + 'A1334', + 'A2362', + 'A432', + 'A2229', + 'A1354', + 'A2644', + 'A899', + 'A2353', + 'A1733', + 'A2568', + 'A231', + 'A1986', + 'A1300', + 'A2126', + 'A750', + 'A2267', + 'A1423', + 'A2176', + 'A476', + 'A2364', + 'A1302', + 'A2319', + 'A801', + 'A3022', + 'A1385', + 'A2271', + 'A341', + 'A3147', + 'A1775', + 'A2763', + 'A947', + 'A2139', + 'A1451', + 'A2636', + 'A540', + 'A2243', + 'A1511', + 'A2338', + 'A856', + 'A3071', + 'A1659', + 'A2531', + 'A169', + 'A1791', + 'A2992', + 'A930', + 'A2449', + 'A1563', + 'A2545', + 'A494', + 'A2733', + 'A1347', + 'A2245', + 'A778', + 'A2354', + 'A1481', + 'A2801', + 'A361', + 'A2115', + 'A1565', + 'A2606', + 'A878', + 'A2901', + 'A1660', + 'A2461', + 'A545', + 'A2528', + 'A1368', + 'A2116', + 'A887', + 'A2807', + 'A1767', + 'A2477', + 'A114', + 'A1758', + 'A1983', + 'A810', + 'A2685', + 'A1567', + 'A2575', + 'A522', + 'A2702', + 'A1591', + 'A3092', + 'A941', + 'A2306', + 'A1638', + 'A2552', + 'A221', + 'A2469', + 'A1397', + 'A2534', + 'A754', + 'A2213', + 'A1407', + 'A2494', + 'A444', + 'A2576', + 'A1525', + 'A2195', + 'A955', + 'A3064', + 'A1658', + 'A2280', + 'A182', + 'A1963', + 'A1318', + 'A2266', + 'A772', + 'A1999', + 'A1404', + 'A2790', + 'A520', + 'A2374', + 'A1515', + 'A2657', + 'A849', + 'A2612', + 'A1577', + 'A2275', + 'A272', + 'A2953', + 'A1517', + 'A2800', + 'A841', + 'A2177', + 'A1529', + 'A3020', + 'A381', + 'A2467', + 'A1578', + 'A2377', + 'A900', + 'A2242', + 'A1538', + 'A2215', + 'A547', + 'A2247', + 'A1745', + 'A2871', + 'A1031', + 'A2705', + 'A1722', + 'A2454', + 'A4', + 'A19', + ], + feat: [ + 'B115', + 'B186', + 'B53', + 'B480', + 'B680', + 'B1109', + 'B130', + 'B984', + 'B585', + 'B1167', + 'B204', + 'B1081', + 'B426', + 'B1608', + 'B648', + 'B1230', + 'B77', + 'B423', + 'B649', + 'B1221', + 'B104', + 'B1095', + 'B612', + 'B1259', + 'B132', + 'B1159', + 'B495', + 'B1163', + 'B40', + 'B1054', + 'B552', + 'B1177', + 'B366', + 'B1236', + 'B673', + 'B1266', + 'B216', + 'B603', + 'B875', + 'B75', + 'B565', + 'B1216', + 'B30', + 'B705', + 'B1252', + 'B517', + 'B1287', + 'B1136', + 'B193', + 'B1874', + 'B712', + 'B1239', + 'B65', + 'B1703', + 'B126', + 'B914', + 'B543', + 'B1234', + 'B71', + 'B353', + 'B952', + 'B32', + 'B155', + 'B88', + 'B461', + 'B736', + 'B179', + 'B330', + 'B714', + 'B194', + 'B667', + 'B1178', + 'B58', + 'B319', + 'B689', + 'B1114', + 'B140', + 'B745', + 'B1257', + 'B87', + 'B288', + 'B1933', + 'B653', + 'B1151', + 'B33', + 'B640', + 'B1187', + 'B332', + 'B1099', + 'B535', + 'B1127', + 'B201', + 'B1024', + 'B577', + 'B1118', + 'B99', + 'B814', + 'B406', + 'B731', + 'B1106', + 'B150', + 'B1217', + 'B615', + 'B1172', + 'B352', + 'B1160', + 'B624', + 'B1208', + 'B529', + 'B211', + 'B721', + 'B1145', + 'B97', + 'B1045', + 'B532', + 'B1133', + 'B46', + 'B1082', + 'B197', + 'B590', + 'B1083', + 'B107', + 'B720', + 'B1699', + 'B317', + 'B1121', + 'B606', + 'B1237', + 'B167', + 'B1192', + 'B524', + 'B1214', + 'B66', + 'B435', + 'B783', + 'B252', + 'B600', + 'B1066', + 'B414', + 'B1189', + 'B650', + 'B1256', + 'B163', + 'B1096', + 'B573', + 'B1173', + 'B321', + 'B1137', + 'B620', + 'B1693', + 'B117', + 'B656', + 'B1225', + 'B345', + 'B1122', + 'B636', + 'B1182', + 'B209', + 'B703', + 'B443', + 'B1220', + 'B693', + 'B1246', + 'B284', + 'B983', + 'B596', + 'B1154', + 'B396', + 'B1263', + 'B711', + 'B1902', + 'B250', + 'B1105', + 'B592', + 'B1223', + 'B372', + 'B1144', + 'B626', + 'B1179', + 'B261', + 'B395', + 'B652', + 'B1793', + 'B102', + 'B324', + 'B702', + 'B1280', + 'B139', + 'B407', + 'B715', + 'B1873', + 'B264', + 'B527', + 'B1107', + 'B365', + 'B666', + 'B1184', + 'B48', + 'B564', + 'B1080', + 'B335', + 'B697', + 'B1855', + 'B170', + 'B675', + 'B3149', + 'B91', + 'B883', + 'B1284', + 'B266', + 'B1138', + 'B593', + 'B1129', + 'B323', + 'B1244', + 'B681', + 'B1166', + 'B744', + 'B282', + 'B1041', + 'B558', + 'B1194', + 'B902', + 'B1176', + 'B176', + 'B1181', + 'B541', + 'B1139', + 'B51', + 'B369', + 'B881', + 'B1183', + 'B49', + 'B305', + 'B533', + 'B151', + 'B692', + 'B1235', + 'B295', + 'B1273', + 'B729', + 'B1255', + 'B68', + 'B421', + 'B794', + 'B291', + 'B621', + 'B1788', + 'B121', + 'B419', + 'B265', + 'B1238', + 'B598', + 'B1153', + 'B95', + 'B554', + 'B957', + 'B354', + 'B610', + 'B1881', + 'B241', + 'B549', + 'B1065', + 'B278', + 'B1209', + 'B684', + 'B1278', + 'B101', + 'B297', + 'B510', + 'B159', + 'B1125', + 'B513', + 'B1103', + 'B70', + 'B262', + 'B468', + 'B146', + 'B719', + 'B1307', + 'B349', + 'B1087', + 'B655', + 'B1149', + 'B85', + 'B397', + 'B1249', + 'B643', + 'B1827', + 'B213', + 'B1203', + 'B696', + 'B1922', + 'B337', + 'B1190', + 'B659', + 'B1243', + 'B37', + 'B737', + 'B59', + 'B808', + 'B398', + 'B3144', + 'B147', + 'B651', + 'B1062', + 'B39', + 'B1157', + 'B515', + 'B1112', + 'B164', + 'B1019', + 'B578', + 'B1152', + 'B315', + 'B1215', + 'B671', + 'B1229', + 'B706', + 'B1185', + 'B175', + 'B498', + 'B1002', + 'B1882', + 'B244', + 'B380', + 'B767', + 'B300', + 'B588', + 'B1130', + 'B219', + 'B1067', + 'B582', + 'B1219', + 'B336', + 'B1037', + 'B634', + 'B1910', + 'B134', + 'B340', + 'B641', + 'B1272', + 'B207', + 'B1191', + 'B658', + 'B1241', + 'B410', + 'B1212', + 'B701', + 'B1817', + 'B161', + 'B537', + 'B1101', + 'B313', + 'B604', + 'B1143', + 'B256', + 'B622', + 'B1201', + 'B363', + 'B1231', + 'B725', + 'B1916', + 'B60', + 'B442', + 'B1135', + 'B276', + 'B1142', + 'B579', + 'B1079', + 'B144', + 'B392', + 'B236', + 'B1119', + 'B663', + 'B1251', + 'B390', + 'B1197', + 'B638', + 'B1158', + 'B189', + 'B616', + 'B1165', + 'B393', + 'B1248', + 'B698', + 'B1268', + 'B307', + 'B1126', + 'B660', + 'B1147', + 'B82', + 'B599', + 'B1156', + 'B298', + 'B758', + 'B430', + 'B739', + 'B235', + 'B501', + 'B1043', + 'B376', + 'B683', + 'B1233', + 'B137', + 'B487', + 'B1064', + 'B344', + 'B1198', + 'B629', + 'B1792', + 'B246', + 'B571', + 'B1040', + 'B383', + 'B1298', + 'B707', + 'B1304', + 'B42', + 'B222', + 'B1094', + 'B611', + 'B1294', + 'B328', + 'B1146', + 'B657', + 'B1204', + 'B128', + 'B356', + 'B450', + 'B1088', + 'B183', + 'B637', + 'B1254', + 'B92', + 'B312', + 'B427', + 'B1186', + 'B664', + 'B1240', + 'B233', + 'B370', + 'B1242', + 'B674', + 'B1195', + 'B184', + 'B776', + 'B417', + 'B700', + 'B1696', + 'B271', + 'B978', + 'B492', + 'B710', + 'B1245', + 'B119', + 'B422', + 'B273', + 'B672', + 'B1288', + 'B375', + 'B1055', + 'B562', + 'B1017', + 'B157', + 'B735', + 'B389', + 'B631', + 'B1164', + 'B255', + 'B769', + 'B472', + 'B1213', + 'B642', + 'B1267', + 'B153', + 'B708', + 'B399', + 'B1188', + 'B685', + 'B1657', + 'B230', + 'B1053', + 'B559', + 'B1110', + 'B416', + 'B1226', + 'B691', + 'B1200', + 'B110', + 'B489', + 'B382', + 'B679', + 'B1218', + 'B248', + 'B1140', + 'B586', + 'B1180', + 'B206', + 'B765', + 'B566', + 'B1282', + 'B35', + 'B387', + 'B676', + 'B1120', + 'B191', + 'B456', + 'B762', + 'B269', + 'B661', + 'B446', + 'B804', + 'B1283', + 'B94', + 'B433', + 'B716', + 'B301', + 'B1199', + 'B635', + 'B1196', + 'B181', + 'B1111', + 'B595', + 'B1132', + 'B287', + 'B822', + 'B1279', + 'B618', + 'B1168', + 'B113', + 'B437', + 'B1169', + 'B644', + 'B1842', + 'B214', + 'B662', + 'B1265', + 'B342', + 'B1211', + 'B678', + 'B1253', + 'B136', + 'B362', + 'B1202', + 'B670', + 'B1291', + 'B225', + 'B1148', + 'B628', + 'B1227', + 'B329', + 'B1222', + 'B694', + 'B1797', + 'B72', + 'B771', + 'B482', + 'B985', + 'B226', + 'B688', + 'B1193', + 'B124', + 'B627', + 'B2895', + 'B293', + 'B937', + 'B597', + 'B1247', + 'B62', + 'B258', + 'B727', + 'B347', + 'B704', + 'B405', + 'B709', + 'B1912', + 'B173', + 'B1124', + 'B669', + 'B1210', + 'B333', + 'B1232', + 'B645', + 'B1269', + 'B106', + 'B665', + 'B1150', + 'B309', + 'B1097', + 'B614', + 'B1131', + 'B199', + 'B1228', + 'B677', + 'B1748', + 'B378', + 'B1205', + 'B687', + 'B1224', + 'B686', + 'B1175', + 'B1026', + 'B581', + 'B1141', + 'B633', + 'B1170', + 'B7', + 'B18', + 'B13', + ], +}; diff --git a/src/tests/covisualization/save-hierarchy.spec.ts b/src/tests/covisualization/save-hierarchy.spec.ts deleted file mode 100644 index 68c9a3e8..00000000 --- a/src/tests/covisualization/save-hierarchy.spec.ts +++ /dev/null @@ -1,230 +0,0 @@ -import { TestBed } from '@angular/core/testing'; -import { AppService } from '@khiops-covisualization/providers/app.service'; -import { DimensionsDatasService } from '@khiops-covisualization/providers/dimensions-datas.service'; -import { HttpClientModule } from '@angular/common/http'; -import { TreenodesService } from '@khiops-covisualization/providers/treenodes.service'; -import { DimensionsDatasVO } from '@khiops-covisualization/model/dimensions-data-vo'; -import { AppConfig } from 'src/environments/environment'; -let appService: AppService; -let treenodesService: TreenodesService; -let dimensionsDatasService: DimensionsDatasService; - -let result; - -describe('CoVisualization', () => { - describe('Save hierarchy : large coclustering [donotworkk10.1.1_id_feat_nospace_Coclustering.json]', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpClientModule], - }); - - treenodesService = TestBed.inject(TreenodesService); - appService = TestBed.inject(AppService); - // saveService = TestBed.inject(SaveService); - dimensionsDatasService = TestBed.inject(DimensionsDatasService); - const fileDatas = require('../../assets/mocks/kc/donotworkk10.1.1_id_feat_nospace_Coclustering.json'); - // const fileDatasUpdated = require("../mocks/covisualization/save-hierarchy/sample3.json"); - - appService.setFileDatas(fileDatas); - - // const isBigJsonFile = appService.isBigJsonFile(); - // console.log('beforeEach ~ isBigJsonFile:', isBigJsonFile); - - // initializeDatas(); - // initializeSavedState(); - }); - - it('Loading large coclustering : isBigJsonFile must return true', () => { - const isBigJsonFile = appService.isBigJsonFile(); - expect(isBigJsonFile).toEqual(true); - }); - - it('Loading large coclustering : initial datas must be valid', () => { - dimensionsDatasService.getDimensions(); - dimensionsDatasService.initSelectedDimensions(); - dimensionsDatasService.saveInitialDimension(); - dimensionsDatasService.constructDimensionsTrees(); - - const dimensionsDatas: DimensionsDatasVO = - dimensionsDatasService.getDatas(); - - // dimensionsDatas.dimensionsTrees[0] - expect(dimensionsDatas.cellPartIndexes.length).toEqual(45057); - expect(dimensionsDatas.cellPartIndexes[0]).toEqual([1201, 624]); - expect(dimensionsDatas.currentDimensionsClusters[0].length).toEqual(5071); - expect(dimensionsDatas.currentDimensionsClusters[0][0].bounds).toEqual( - '{1040, 1719, 1720}', - ); - expect(dimensionsDatas.currentDimensionsClusters[1].length).toEqual(1253); - expect(dimensionsDatas.currentDimensionsClusters[1][0].bounds).toEqual( - '{feat_1209}', - ); - expect(dimensionsDatas.currentDimensionsTrees[0][0].id).toEqual(2955); - expect(dimensionsDatas.dimensions[0].initialParts).toEqual(2536); - }); - - // it("Loading large coclustering : computed reduced datas must be valid", () => { - // dimensionsDatasService.getDimensions(); - // dimensionsDatasService.initSelectedDimensions(); - // dimensionsDatasService.saveInitialDimension(); - // dimensionsDatasService.constructDimensionsTrees(); - - // const dimensionsDatas: DimensionsDatasVO = - // dimensionsDatasService.getDatas(); - - // const unfoldState = - // dimensionsDatas.dimensions.length * - // AppConfig.covisualizationCommon.UNFOLD_HIERARCHY - // .ERGONOMIC_LIMIT; - - // treenodesService.setSelectedUnfoldHierarchy(unfoldState); - // const collapsedNodes = - // treenodesService.getLeafNodesForARank(unfoldState); - // treenodesService.setSavedCollapsedNodes(collapsedNodes); - - // let datas = treenodesService.constructSavedJson(collapsedNodes); - // appService.setCroppedFileDatas(datas); - - // // const dimensionsDatas: DimensionsDatasVO = - // // dimensionsDatasService.getDatas(); - - // // dimensionsDatas.dimensionsTrees[0] - // expect(dimensionsDatas.cellPartIndexes.length).toEqual(45057); - // expect(dimensionsDatas.cellPartIndexes[0]).toEqual([1201, 624]); - // expect(dimensionsDatas.currentDimensionsClusters[0].length).toEqual( - // 5071 - // ); - // expect( - // dimensionsDatas.currentDimensionsClusters[0][0].bounds - // ).toEqual("{1040, 1719, 1720}"); - // expect(dimensionsDatas.currentDimensionsClusters[1].length).toEqual( - // 1253 - // ); - // expect( - // dimensionsDatas.currentDimensionsClusters[1][0].bounds - // ).toEqual("{feat_1209}"); - // expect(dimensionsDatas.currentDimensionsTrees[0][0].id).toEqual( - // 2955 - // ); - // expect(dimensionsDatas.dimensions[0].initialParts).toEqual(2536); - // }); - - // it("dimensionPartitions values must be collapsed", () => { - // expect( - // result.coclusteringReport.dimensionPartitions[0].valueGroups[0] - // .values - // ).toEqual([ - // "Private", - // "Never-worked", - // "Self-emp-not-inc", - // "Without-pay", - // "Self-emp-inc", - // ]); - // }); - - // it("dimensionPartitions valueFrequencies must be collapsed", () => { - // expect( - // result.coclusteringReport.dimensionPartitions[0].valueGroups[0] - // .valueFrequencies - // ).toEqual([36705, 10, 3862, 21, 1695]); - // }); - - // it("dimensionPartitions valueTypicalities must be collapsed", () => { - // expect( - // result.coclusteringReport.dimensionPartitions[0].valueGroups[0] - // .valueTypicalities - // ).toEqual([1, 0.00631547, 1, 0.0170314, 1]); - // }); - - // it("cellPartIndexes must be collapsed and reorded", () => { - // expect(result.coclusteringReport.cellPartIndexes).toEqual([ - // [0, 1, 1], - // [0, 0, 1], - // [0, 1, 0], - // [1, 1, 1], - // [1, 0, 1], - // [1, 1, 0], - // [0, 0, 0], - // [1, 0, 0], - // ]); - // }); - - // it("cellFrequencies must be collapsed and reorded", () => { - // expect(result.coclusteringReport.cellFrequencies).toEqual([ - // 28864, 8962, 3964, 3109, 2346, 795, 503, 299, - // ]); - // }); - - // it("summary cells must be collapsed", () => { - // expect(result.coclusteringReport.summary.cells).toEqual(8); - // }); - // }); - - // describe("Save hierarchy : Numerical [sample0.json]", () => { - // beforeEach(() => { - // TestBed.configureTestingModule({ - // imports: [HttpClientModule], - // }); - - // treenodesService = TestBed.inject(TreenodesService); - // saveService = TestBed.inject(SaveService); - // appService = TestBed.inject(AppService); - // dimensionsDatasService = TestBed.inject(DimensionsDatasService); - // const fileDatas = require("../../assets/mocks/kc/sample0.json"); - // const fileDatasUpdated = require("../mocks/covisualization/save-hierarchy/sample0.json"); - - // appService.setFileDatas(fileDatas); - - // dimensionsDatasService.initialize(); - // dimensionsDatasService.getDimensions(); - // dimensionsDatasService.initSelectedDimensions(); - // dimensionsDatasService.constructDimensionsTrees(); - - // treenodesService.initialize(); - - // result = saveService.truncateJsonHierarchy(fileDatasUpdated); - // result = saveService.updateSummariesParts(result); - // result = saveService.truncateJsonPartition(result); - // result = saveService.truncateJsonCells(result); - // result = saveService.updateSummariesCells(result); - // }); - - // it("dimensionHierarchies must be collapsed and reorded by leaf and rank", () => { - // const clusters = - // result.coclusteringReport.dimensionHierarchies[0].clusters.map( - // (e) => e.cluster - // ); - // expect(clusters).toEqual([ - // "]-inf;1.5]", - // "]1.5;+inf[", - // "]-inf;+inf[", - // ]); - // }); - - // it("dimensionPartitions intervals bounds must be collapsed", () => { - // expect( - // result.coclusteringReport.dimensionPartitions[0].intervals[0] - // .bounds - // ).toEqual([1, 1.5]); - // }); - - // it("cellPartIndexes must be collapsed and reorded", () => { - // expect(result.coclusteringReport.cellPartIndexes).toEqual([ - // [1, 0, 0], - // [0, 0, 0], - // [1, 1, 0], - // [0, 1, 0], - // ]); - // }); - - // it("cellFrequencies must be collapsed and reorded", () => { - // expect(result.coclusteringReport.cellFrequencies).toEqual([ - // 10000, 3500, 2500, 2000, - // ]); - // }); - - // it("summary cells must be collapsed", () => { - // expect(result.coclusteringReport.summary.cells).toEqual(4); - // }); - }); -});