diff --git a/data/spectral_codebook.json b/data/spectral_codebook.json index 0c4d5236..92eb0a2f 100644 --- a/data/spectral_codebook.json +++ b/data/spectral_codebook.json @@ -4,6 +4,21 @@ "source": "formal/SilverSight/PIST/Matrices250.lean", "matrix_count": 250, "lambda_semantics": "spectral_radius is the exact max root modulus of the integer characteristic polynomial (charpoly); lambda_power_iteration is the legacy estimate and is unreliable on peripheral spectra", + "phi_corkscrew": { + "packing": { + "base": 328469, + "offset": 164234, + "digits": 8, + "order": "little-endian: charpoly c1 is digit 0", + "semantics": "spiral_index = \u03a3 (c_i + offset)\u00b7base^i \u2014 exact integer, injective on charpoly fingerprints (unpack_spiral_index inverts it exactly); inherits charpoly's non-injectivity on matrices, so identity still needs the within-cluster index" + }, + "layout": { + "psi": "2\u03c0/\u03c6\u00b2 (golden angle)", + "angle_frac": "frac(n\u00b7(3\u2212\u221a5)/2), decimal-exact precision", + "min_angular_separation_frac": 4.6377435725108995e-06, + "semantics": "decorative placement only: f(n) is injective because 1/\u03c6\u00b2 is irrational, and carries no information beyond spiral_index" + } + }, "quantization": { "method": "gap_aware_deduped_min_support", "gap_factor": 3.0, @@ -416,7 +431,12 @@ ], "density": 0.25, "frobenius": 4.2426, - "trace": 0 + "trace": 0, + "spiral_index": 67753704206350119549153962646623157305514383, + "layout": { + "radius_sq": 67753704206350119549153962646623157305514383, + "angle_frac": 0.365469041988 + } }, { "equation_id": "rrc_eq_01f85e831660c26e", @@ -436,7 +456,12 @@ ], "density": 0.25, "frobenius": 4.2426, - "trace": 2 + "trace": 2, + "spiral_index": 67752466607864474420919646241195319283955329, + "layout": { + "radius_sq": 67752466607864474420919646241195319283955329, + "angle_frac": 0.048050726189 + } }, { "equation_id": "rrc_eq_0252524b379eac41", @@ -456,7 +481,12 @@ ], "density": 0.0312, "frobenius": 1.4142, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891659577163645738395164719, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164719, + "angle_frac": 0.117424157609 + } }, { "equation_id": "rrc_eq_03c5ca134c799e06", @@ -476,7 +506,12 @@ ], "density": 0.1094, "frobenius": 2.6458, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_04ac9264dcd7c6c1", @@ -497,6 +532,11 @@ "density": 0.9531, "frobenius": 11.0, "trace": 8, + "spiral_index": 67805271572688141536411504174201944495619399, + "layout": { + "radius_sq": 67805271572688141536411504174201944495619399, + "angle_frac": 0.004209088753 + }, "sparse_tail": true }, { @@ -518,6 +558,11 @@ "density": 0.0469, "frobenius": 1.7321, "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + }, "identical_matrix_ids": [ "rrc_eq_068487b9141c4fb6", "rrc_eq_e25b46d22b7ca0f1" @@ -542,6 +587,11 @@ "density": 1.1875, "frobenius": 15.0333, "trace": 8, + "spiral_index": 60512879200114702235633510481184854261339051, + "layout": { + "radius_sq": 60512879200114702235633510481184854261339051, + "angle_frac": 0.756701630484 + }, "sparse_tail": true }, { @@ -562,7 +612,12 @@ ], "density": 0.1094, "frobenius": 2.6458, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891659577163645738394836250, + "layout": { + "radius_sq": 67752466607864485891659577163645738394836250, + "angle_frac": 0.12367484682 + } }, { "equation_id": "rrc_eq_068487b9141c4fb6", @@ -583,6 +638,11 @@ "density": 0.0469, "frobenius": 1.7321, "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + }, "identical_matrix_ids": [ "rrc_eq_05370b4783a8bd6a", "rrc_eq_e25b46d22b7ca0f1" @@ -606,7 +666,12 @@ ], "density": 0.4375, "frobenius": 5.831, - "trace": 5 + "trace": 5, + "spiral_index": 67751641541788804845715386052484745227689486, + "layout": { + "radius_sq": 67751641541788804845715386052484745227689486, + "angle_frac": 0.834419493558 + } }, { "equation_id": "rrc_eq_07b0a4a6f75d86b4", @@ -626,7 +691,12 @@ ], "density": 0.3594, "frobenius": 5.5678, - "trace": 0 + "trace": 0, + "spiral_index": 67751641553092198151925295789070304886699968, + "layout": { + "radius_sq": 67751641553092198151925295789070304886699968, + "angle_frac": 0.785899932944 + } }, { "equation_id": "rrc_eq_07bd7750aa9c1698", @@ -646,7 +716,12 @@ ], "density": 0.0781, "frobenius": 2.2361, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645630502952290, + "layout": { + "radius_sq": 67752466607864485891659577163645630502952290, + "angle_frac": 0.663275271511 + } }, { "equation_id": "rrc_eq_0abce0721f473201", @@ -666,7 +741,12 @@ ], "density": 0.2344, "frobenius": 4.5826, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864516480493403402338842833744080, + "layout": { + "radius_sq": 67752466607864516480493403402338842833744080, + "angle_frac": 0.865761920336 + } }, { "equation_id": "rrc_eq_0d19ee61a2cd8497", @@ -686,7 +766,12 @@ ], "density": 0.2344, "frobenius": 5.1962, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891554810952510739530776421, + "layout": { + "radius_sq": 67752466607864485891554810952510739530776421, + "angle_frac": 0.779271808435 + } }, { "equation_id": "rrc_eq_0ddb4aae4fd1d8d5", @@ -706,7 +791,12 @@ ], "density": 0.2812, "frobenius": 4.2426, - "trace": 1 + "trace": 1, + "spiral_index": 67752054069174927685993538930547717958080904, + "layout": { + "radius_sq": 67752054069174927685993538930547717958080904, + "angle_frac": 0.4856154594 + } }, { "equation_id": "rrc_eq_0edd7758873784a5", @@ -726,7 +816,12 @@ ], "density": 0.0938, "frobenius": 2.4495, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_1038b814e5a78435", @@ -747,6 +842,11 @@ "density": 0.0312, "frobenius": 1.4142, "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + }, "identical_matrix_ids": [ "rrc_eq_673652a4317dd847" ] @@ -769,7 +869,12 @@ ], "density": 0.2344, "frobenius": 4.1231, - "trace": 0 + "trace": 0, + "spiral_index": 67751641530485354185910587914775075905219841, + "layout": { + "radius_sq": 67751641530485354185910587914775075905219841, + "angle_frac": 0.21941592149 + } }, { "equation_id": "rrc_eq_10dfe03d2d21bf90", @@ -789,7 +894,12 @@ ], "density": 0.2969, "frobenius": 4.3589, - "trace": 3 + "trace": 3, + "spiral_index": 67752466605352624536133532371969057616214263, + "layout": { + "radius_sq": 67752466605352624536133532371969057616214263, + "angle_frac": 0.257878508438 + } }, { "equation_id": "rrc_eq_114c66f1878ac7b8", @@ -809,7 +919,12 @@ ], "density": 0.2812, "frobenius": 4.6904, - "trace": 2 + "trace": 2, + "spiral_index": 67752466604096665181380995298094238947377083, + "layout": { + "radius_sq": 67752466604096665181380995298094238947377083, + "angle_frac": 0.880464172844 + } }, { "equation_id": "rrc_eq_12d5519ce1a35889", @@ -829,7 +944,12 @@ ], "density": 0.4688, "frobenius": 7.0711, - "trace": 0 + "trace": 0, + "spiral_index": 67752466617912099552861988258238886154958921, + "layout": { + "radius_sq": 67752466617912099552861988258238886154958921, + "angle_frac": 0.769241967467 + } }, { "equation_id": "rrc_eq_12d678b6dc94f9d6", @@ -849,7 +969,12 @@ ], "density": 0.3281, "frobenius": 5.1962, - "trace": 1 + "trace": 1, + "spiral_index": 67750816450594330535918134505293849379705495, + "layout": { + "radius_sq": 67750816450594330535918134505293849379705495, + "angle_frac": 0.285355473026 + } }, { "equation_id": "rrc_eq_131b32c8ed70796c", @@ -869,7 +994,12 @@ ], "density": 0.0781, "frobenius": 2.2361, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_14fd73dcf1af02b8", @@ -889,7 +1019,12 @@ ], "density": 0.8906, "frobenius": 9.8489, - "trace": 5 + "trace": 5, + "spiral_index": 67777218710704904691072410479519109145455674, + "layout": { + "radius_sq": 67777218710704904691072410479519109145455674, + "angle_frac": 0.817140122049 + } }, { "equation_id": "rrc_eq_1523798f49d3e916", @@ -909,7 +1044,12 @@ ], "density": 0.3594, "frobenius": 5.1962, - "trace": 1 + "trace": 1, + "spiral_index": 67752466612888227720724077027598242563352194, + "layout": { + "radius_sq": 67752466612888227720724077027598242563352194, + "angle_frac": 0.703850144096 + } }, { "equation_id": "rrc_eq_16a8e172297c28a7", @@ -929,7 +1069,12 @@ ], "density": 0.5312, "frobenius": 7.746, - "trace": 5 + "trace": 5, + "spiral_index": 67759892153564741377397081215427198442059871, + "layout": { + "radius_sq": 67759892153564741377397081215427198442059871, + "angle_frac": 0.537940385181 + } }, { "equation_id": "rrc_eq_17cb89b04d825252", @@ -949,7 +1094,12 @@ ], "density": 0.1094, "frobenius": 2.6458, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_181e73a390899053", @@ -969,7 +1119,12 @@ ], "density": 0.75, "frobenius": 8.9443, - "trace": 4 + "trace": 4, + "spiral_index": 67764018098094737321959535253804262077637556, + "layout": { + "radius_sq": 67764018098094737321959535253804262077637556, + "angle_frac": 0.782004894213 + } }, { "equation_id": "rrc_eq_185011f4d6cf6a2b", @@ -990,6 +1145,11 @@ "density": 0.1406, "frobenius": 3.0, "trace": 1, + "spiral_index": 67752466607864485891659577128206599162050541, + "layout": { + "radius_sq": 67752466607864485891659577128206599162050541, + "angle_frac": 0.141823395995 + }, "identical_matrix_ids": [ "rrc_eq_8b812bf47cc024b4" ] @@ -1012,7 +1172,12 @@ ], "density": 0.2969, "frobenius": 4.3589, - "trace": 1 + "trace": 1, + "spiral_index": 67752879150321838042435712225200731427391747, + "layout": { + "radius_sq": 67752879150321838042435712225200731427391747, + "angle_frac": 0.27131883971 + } }, { "equation_id": "rrc_eq_1b1de15c4bbf2d2e", @@ -1032,7 +1197,12 @@ ], "density": 0.4375, "frobenius": 6.0, - "trace": 3 + "trace": 3, + "spiral_index": 67752466607864455302988720960796696052771612, + "layout": { + "radius_sq": 67752466607864455302988720960796696052771612, + "angle_frac": 0.19763349932 + } }, { "equation_id": "rrc_eq_1d0a752af1946515", @@ -1052,7 +1222,12 @@ ], "density": 0.125, "frobenius": 2.8284, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645630503280759, + "layout": { + "radius_sq": 67752466607864485891659577163645630503280759, + "angle_frac": 0.6570245823 + } }, { "equation_id": "rrc_eq_1f12deb00ad16d8f", @@ -1072,7 +1247,12 @@ ], "density": 0.1406, "frobenius": 3.0, - "trace": 0 + "trace": 0, + "spiral_index": 67752466609120418481208707756139372820419411, + "layout": { + "radius_sq": 67752466609120418481208707756139372820419411, + "angle_frac": 0.033261372396 + } }, { "equation_id": "rrc_eq_1f5af7e9fb2b518f", @@ -1092,7 +1272,12 @@ ], "density": 0.2188, "frobenius": 3.7417, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891636295775517828475513908, + "layout": { + "radius_sq": 67752466607864485891636295775517828475513908, + "angle_frac": 0.486439389577 + } }, { "equation_id": "rrc_eq_1f912c8afa928326", @@ -1112,7 +1297,12 @@ ], "density": 0.6719, "frobenius": 12.0416, - "trace": 1 + "trace": 1, + "spiral_index": 67768555499950596443975657793793047355014537, + "layout": { + "radius_sq": 67768555499950596443975657793793047355014537, + "angle_frac": 0.803478581912 + } }, { "equation_id": "rrc_eq_1fe1cbc05827ec00", @@ -1132,7 +1322,12 @@ ], "density": 0.3594, "frobenius": 5.7446, - "trace": 2 + "trace": 2, + "spiral_index": 67752466615400081429198814585163876390755647, + "layout": { + "radius_sq": 67752466615400081429198814585163876390755647, + "angle_frac": 0.744426482435 + } }, { "equation_id": "rrc_eq_20b0dce68b1ff729", @@ -1152,7 +1347,12 @@ ], "density": 0.2812, "frobenius": 4.2426, - "trace": 1 + "trace": 1, + "spiral_index": 67752466609120418481150504498454918931977162, + "layout": { + "radius_sq": 67752466609120418481150504498454918931977162, + "angle_frac": 0.291296223588 + } }, { "equation_id": "rrc_eq_20f6a9ed1c2675da", @@ -1172,7 +1372,12 @@ ], "density": 0.2188, "frobenius": 4.0, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891613014422829705139624101, + "layout": { + "radius_sq": 67752466607864485891613014422829705139624101, + "angle_frac": 0.133818258435 + } }, { "equation_id": "rrc_eq_217148f607dfe5ff", @@ -1192,7 +1397,12 @@ ], "density": 0.0625, "frobenius": 2.0, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_21c2954626a5661d", @@ -1212,7 +1422,12 @@ ], "density": 0.4531, "frobenius": 7.8102, - "trace": 0 + "trace": 0, + "spiral_index": 67751229004355033933202374578464087997149942, + "layout": { + "radius_sq": 67751229004355033933202374578464087997149942, + "angle_frac": 0.471633265331 + } }, { "equation_id": "rrc_eq_251255e3132f5533", @@ -1232,7 +1447,12 @@ ], "density": 0.25, "frobenius": 4.0, - "trace": 2 + "trace": 2, + "spiral_index": 67752466607864485891659577163645522611396796, + "layout": { + "radius_sq": 67752466607864485891659577163645522611396796, + "angle_frac": 0.050726973241 + } }, { "equation_id": "rrc_eq_25d3e2f91df8c0a0", @@ -1252,7 +1472,12 @@ ], "density": 0.1875, "frobenius": 3.4641, - "trace": 2 + "trace": 2, + "spiral_index": 67752466607864485891671217786831145159873038, + "layout": { + "radius_sq": 67752466607864485891671217786831145159873038, + "angle_frac": 0.669191323348 + } }, { "equation_id": "rrc_eq_282beac067cdee85", @@ -1272,7 +1497,12 @@ ], "density": 0.2656, "frobenius": 4.3589, - "trace": 3 + "trace": 3, + "spiral_index": 67752466607864485891624655258650378869239455, + "layout": { + "radius_sq": 67752466607864485891624655258650378869239455, + "angle_frac": 0.551689085685 + } }, { "equation_id": "rrc_eq_295fb47f2cd6ddfb", @@ -1292,7 +1522,12 @@ ], "density": 0.375, "frobenius": 5.831, - "trace": 5 + "trace": 5, + "spiral_index": 67750816448082450062647414581384525981486931, + "layout": { + "radius_sq": 67750816448082450062647414581384525981486931, + "angle_frac": 0.587717093352 + } }, { "equation_id": "rrc_eq_296f8ca4495edd26", @@ -1313,6 +1548,11 @@ "density": 0.4375, "frobenius": 6.0, "trace": 0, + "spiral_index": 67752466597816914290554751521613932665259889, + "layout": { + "radius_sq": 67752466597816914290554751521613932665259889, + "angle_frac": 0.779892015244 + }, "identical_matrix_ids": [ "rrc_eq_3e634eac50426ea3" ] @@ -1335,7 +1575,12 @@ ], "density": 0.5312, "frobenius": 8.2462, - "trace": 5 + "trace": 5, + "spiral_index": 67752466306439907324886539619264127567700921, + "layout": { + "radius_sq": 67752466306439907324886539619264127567700921, + "angle_frac": 0.316007212058 + } }, { "equation_id": "rrc_eq_2ee35bd32d933ac7", @@ -1355,7 +1600,12 @@ ], "density": 0.2812, "frobenius": 5.6569, - "trace": 2 + "trace": 2, + "spiral_index": 67752466607864485891659577057327889126643995, + "layout": { + "radius_sq": 67752466607864485891659577057327889126643995, + "angle_frac": 0.470446961336 + } }, { "equation_id": "rrc_eq_2ee9bc98d2a7c773", @@ -1375,7 +1625,12 @@ ], "density": 0.4219, "frobenius": 6.0828, - "trace": 3 + "trace": 3, + "spiral_index": 67754941818651000220913932386610032959402192, + "layout": { + "radius_sq": 67754941818651000220913932386610032959402192, + "angle_frac": 0.497344557466 + } }, { "equation_id": "rrc_eq_2efd637f1e4bd389", @@ -1395,7 +1650,12 @@ ], "density": 0.1719, "frobenius": 3.873, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864501186041568218520588757389760, + "layout": { + "radius_sq": 67752466607864501186041568218520588757389760, + "angle_frac": 0.77458494874 + } }, { "equation_id": "rrc_eq_2f24d8cc16590af0", @@ -1415,7 +1675,12 @@ ], "density": 0.2344, "frobenius": 4.3589, - "trace": 2 + "trace": 2, + "spiral_index": 67752466607864470597312508084644849699102834, + "layout": { + "radius_sq": 67752466607864470597312508084644849699102834, + "angle_frac": 0.77161814486 + } }, { "equation_id": "rrc_eq_2f44e729b9d25d34", @@ -1436,6 +1701,11 @@ "density": 0.25, "frobenius": 4.6904, "trace": 0, + "spiral_index": 67752466605352620712468190638782636289721993, + "layout": { + "radius_sq": 67752466605352620712468190638782636289721993, + "angle_frac": 0.852243628637 + }, "identical_matrix_ids": [ "rrc_eq_e4b70a718fcfb1ab" ] @@ -1458,7 +1728,12 @@ ], "density": 0.0156, "frobenius": 1.0, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_310ec3a93d82b04e", @@ -1478,7 +1753,12 @@ ], "density": 0.2969, "frobenius": 5.7446, - "trace": 4 + "trace": 4, + "spiral_index": 67752466602840740239034501033418808957205299, + "layout": { + "radius_sq": 67752466602840740239034501033418808957205299, + "angle_frac": 0.517399940549 + } }, { "equation_id": "rrc_eq_3305fd3254a89e5b", @@ -1498,7 +1778,12 @@ ], "density": 0.2188, "frobenius": 5.2915, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864417066731085242512888664233060, + "layout": { + "radius_sq": 67752466607864417066731085242512888664233060, + "angle_frac": 0.224990540374 + } }, { "equation_id": "rrc_eq_35e1c2bc2da6d854", @@ -1519,6 +1804,11 @@ "density": 0.4688, "frobenius": 6.3246, "trace": 3, + "spiral_index": 67753291665148711459155795982587265377878668, + "layout": { + "radius_sq": 67753291665148711459155795982587265377878668, + "angle_frac": 0.874358636817 + }, "identical_matrix_ids": [ "rrc_eq_b9eb3119b4d99483" ] @@ -1541,7 +1831,12 @@ ], "density": 0.25, "frobenius": 4.4721, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864462949981824405636632192611983, + "layout": { + "radius_sq": 67752466607864462949981824405636632192611983, + "angle_frac": 0.279542188829 + } }, { "equation_id": "rrc_eq_372fdc0c8b995ef2", @@ -1561,7 +1856,12 @@ ], "density": 0.3438, "frobenius": 5.099, - "trace": 3 + "trace": 3, + "spiral_index": 67756591967129570095902274926155651617273235, + "layout": { + "radius_sq": 67756591967129570095902274926155651617273235, + "angle_frac": 0.401710926395 + } }, { "equation_id": "rrc_eq_3823a73f30463f6e", @@ -1581,7 +1881,12 @@ ], "density": 0.1875, "frobenius": 3.4641, - "trace": 2 + "trace": 2, + "spiral_index": 67752466607864485891647936575899147188247162, + "layout": { + "radius_sq": 67752466607864485891647936575899147188247162, + "angle_frac": 0.243978282096 + } }, { "equation_id": "rrc_eq_39d59d35fd9672a0", @@ -1601,7 +1906,12 @@ ], "density": 0.3125, "frobenius": 5.2915, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864508833151079206463067829094815, + "layout": { + "radius_sq": 67752466607864508833151079206463067829094815, + "angle_frac": 0.596570073854 + } }, { "equation_id": "rrc_eq_3a60fca57229c15b", @@ -1621,7 +1931,12 @@ ], "density": 0.0625, "frobenius": 2.0, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_3ad1c4d008fc910b", @@ -1641,7 +1956,12 @@ ], "density": 0.3438, "frobenius": 4.899, - "trace": 3 + "trace": 3, + "spiral_index": 67754116750063434878231569858114680867902788, + "layout": { + "radius_sq": 67754116750063434878231569858114680867902788, + "angle_frac": 0.939784667444 + } }, { "equation_id": "rrc_eq_3c97cd0a63059c60", @@ -1661,7 +1981,12 @@ ], "density": 0.1719, "frobenius": 3.3166, - "trace": 0 + "trace": 0, + "spiral_index": 67752466605352605418132762218406725159346920, + "layout": { + "radius_sq": 67752466605352605418132762218406725159346920, + "angle_frac": 0.160949222766 + } }, { "equation_id": "rrc_eq_3db7a0150185b5a1", @@ -1681,7 +2006,12 @@ ], "density": 0.25, "frobenius": 4.2426, - "trace": 3 + "trace": 3, + "spiral_index": 67752466611632264542341120834316225673428825, + "layout": { + "radius_sq": 67752466611632264542341120834316225673428825, + "angle_frac": 0.397732454543 + } }, { "equation_id": "rrc_eq_3e634eac50426ea3", @@ -1702,6 +2032,11 @@ "density": 0.4375, "frobenius": 6.0, "trace": 0, + "spiral_index": 67752466597816914290554751521613932665259889, + "layout": { + "radius_sq": 67752466597816914290554751521613932665259889, + "angle_frac": 0.779892015244 + }, "identical_matrix_ids": [ "rrc_eq_296f8ca4495edd26" ] @@ -1724,7 +2059,12 @@ ], "density": 0.0781, "frobenius": 2.2361, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_3ed73c5849372e40", @@ -1744,7 +2084,12 @@ ], "density": 0.0938, "frobenius": 2.4495, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577128206491270495050, + "layout": { + "radius_sq": 67752466607864485891659577128206491270495050, + "angle_frac": 0.675173131475 + } }, { "equation_id": "rrc_eq_3f87b53694e706e9", @@ -1764,7 +2109,12 @@ ], "density": 0.1094, "frobenius": 2.6458, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_3f87d2c06726bc30", @@ -1785,6 +2135,11 @@ "density": 1.9688, "frobenius": 22.0, "trace": 7, + "spiral_index": 261965656833193854361831125044014155968, + "layout": { + "radius_sq": 261965656833193854361831125044014155968, + "angle_frac": 0.095399085487 + }, "sparse_tail": true, "identical_matrix_ids": [ "rrc_eq_ac1a7a22801b7d77" @@ -1808,7 +2163,12 @@ ], "density": 0.2812, "frobenius": 4.6904, - "trace": 3 + "trace": 3, + "spiral_index": 67752466600328890354353153233572283923017947, + "layout": { + "radius_sq": 67752466600328890354353153233572283923017947, + "angle_frac": 0.436014165608 + } }, { "equation_id": "rrc_eq_3fc5864a199b7aa9", @@ -1828,7 +2188,12 @@ ], "density": 0.0625, "frobenius": 2.0, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_434ad4a173c4cb24", @@ -1848,7 +2213,12 @@ ], "density": 0.0469, "frobenius": 1.7321, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_4430cc5b9ebb8311", @@ -1868,7 +2238,12 @@ ], "density": 0.1562, "frobenius": 3.4641, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577128206383378282620, + "layout": { + "radius_sq": 67752466607864485891659577128206383378282620, + "angle_frac": 0.839058234127 + } }, { "equation_id": "rrc_eq_45606d1f25dd6aa5", @@ -1888,7 +2263,12 @@ ], "density": 0.3281, "frobenius": 7.0, - "trace": 1 + "trace": 1, + "spiral_index": 67752466617912053668679997787274224604966953, + "layout": { + "radius_sq": 67752466617912053668679997787274224604966953, + "angle_frac": 0.293931787876 + } }, { "equation_id": "rrc_eq_45b2907bd442578f", @@ -1908,7 +2288,12 @@ ], "density": 0.3438, "frobenius": 6.0, - "trace": 2 + "trace": 2, + "spiral_index": 67752466607864466774054588729977453283632810, + "layout": { + "radius_sq": 67752466607864466774054588729977453283632810, + "angle_frac": 0.608456050304 + } }, { "equation_id": "rrc_eq_4795802d1dfe8dc9", @@ -1928,7 +2313,12 @@ ], "density": 0.0781, "frobenius": 2.2361, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_4b0eb5baf8d88582", @@ -1948,7 +2338,12 @@ ], "density": 0.0625, "frobenius": 2.0, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_4b6cfeff599d0583", @@ -1968,7 +2363,12 @@ ], "density": 0.4062, "frobenius": 6.3246, - "trace": 2 + "trace": 2, + "spiral_index": 67749166333514002751460004595589677239341761, + "layout": { + "radius_sq": 67749166333514002751460004595589677239341761, + "angle_frac": 0.859230411325 + } }, { "equation_id": "rrc_eq_4c87c96f612f6100", @@ -1988,7 +2388,12 @@ ], "density": 0.1719, "frobenius": 3.3166, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864493538862213385146633022460587, + "layout": { + "radius_sq": 67752466607864493538862213385146633022460587, + "angle_frac": 0.35594315353 + } }, { "equation_id": "rrc_eq_4cab00eaeac59782", @@ -2008,7 +2413,12 @@ ], "density": 0.125, "frobenius": 2.8284, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891659577163645738395164719, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164719, + "angle_frac": 0.117424157609 + } }, { "equation_id": "rrc_eq_4d8a407792ae463c", @@ -2028,7 +2438,12 @@ ], "density": 0.3438, "frobenius": 5.2915, - "trace": 2 + "trace": 2, + "spiral_index": 67754116734992182626090757530394503732822990, + "layout": { + "radius_sq": 67754116734992182626090757530394503732822990, + "angle_frac": 0.436680010698 + } }, { "equation_id": "rrc_eq_50659e00428d753c", @@ -2048,7 +2463,12 @@ ], "density": 0.7188, "frobenius": 9.0554, - "trace": 5 + "trace": 5, + "spiral_index": 67670784776248556182609220680336707700910428, + "layout": { + "radius_sq": 67670784776248556182609220680336707700910428, + "angle_frac": 0.738411223026 + } }, { "equation_id": "rrc_eq_5193efd26258bc51", @@ -2068,7 +2488,12 @@ ], "density": 0.1875, "frobenius": 3.7417, - "trace": 0 + "trace": 0, + "spiral_index": 67752466610376351070792760395385031594297692, + "layout": { + "radius_sq": 67752466610376351070792760395385031594297692, + "angle_frac": 0.144957704424 + } }, { "equation_id": "rrc_eq_5281edbc9d70f191", @@ -2088,7 +2513,12 @@ ], "density": 0.3438, "frobenius": 5.4772, - "trace": 3 + "trace": 3, + "spiral_index": 67745866056651948850098082151369253790136537, + "layout": { + "radius_sq": 67745866056651948850098082151369253790136537, + "angle_frac": 0.07730382357 + } }, { "equation_id": "rrc_eq_535b43060096e699", @@ -2108,7 +2538,12 @@ ], "density": 0.1719, "frobenius": 3.3166, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864497362446070437082306550276411, + "layout": { + "radius_sq": 67752466607864497362446070437082306550276411, + "angle_frac": 0.467985872963 + } }, { "equation_id": "rrc_eq_56bc9e8becb7bcba", @@ -2128,7 +2563,12 @@ ], "density": 0.2812, "frobenius": 6.1644, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891345277467066672711954858, + "layout": { + "radius_sq": 67752466607864485891345277467066672711954858, + "angle_frac": 0.312637692104 + } }, { "equation_id": "rrc_eq_56d979e780ead00b", @@ -2148,7 +2588,12 @@ ], "density": 0.5156, "frobenius": 6.7082, - "trace": 3 + "trace": 3, + "spiral_index": 67752466649310058696172941806964766727259399, + "layout": { + "radius_sq": 67752466649310058696172941806964766727259399, + "angle_frac": 0.265690002467 + } }, { "equation_id": "rrc_eq_57188e85cab23a67", @@ -2168,7 +2613,12 @@ ], "density": 0.2656, "frobenius": 5.5678, - "trace": 3 + "trace": 3, + "spiral_index": 67752466607864474420873083890208414996208361, + "layout": { + "radius_sq": 67752466607864474420873083890208414996208361, + "angle_frac": 0.500838703514 + } }, { "equation_id": "rrc_eq_59c14acaba40cdc9", @@ -2188,7 +2638,12 @@ ], "density": 0.2344, "frobenius": 3.873, - "trace": 1 + "trace": 1, + "spiral_index": 67752466606608568596527359566461453090846039, + "layout": { + "radius_sq": 67752466606608568596527359566461453090846039, + "angle_frac": 0.642402234201 + } }, { "equation_id": "rrc_eq_5a01598605abcd3f", @@ -2208,7 +2663,12 @@ ], "density": 0.1406, "frobenius": 3.3166, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577092767459929593302, + "layout": { + "radius_sq": 67752466607864485891659577092767459929593302, + "angle_frac": 0.53568726721 + } }, { "equation_id": "rrc_eq_5d1fa53e2bceba76", @@ -2228,7 +2688,12 @@ ], "density": 0.1719, "frobenius": 3.3166, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864482068040798064958040517739899, + "layout": { + "radius_sq": 67752466607864482068040798064958040517739899, + "angle_frac": 0.828274388567 + } }, { "equation_id": "rrc_eq_5d39c74f1cbc3aab", @@ -2248,7 +2713,12 @@ ], "density": 0.1406, "frobenius": 3.3166, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577092767459929593302, + "layout": { + "radius_sq": 67752466607864485891659577092767459929593302, + "angle_frac": 0.53568726721 + } }, { "equation_id": "rrc_eq_5e10957e0cbb9de8", @@ -2269,6 +2739,11 @@ "density": 0.4062, "frobenius": 5.831, "trace": 4, + "spiral_index": 67752466610376339600017907709695701997407319, + "layout": { + "radius_sq": 67752466610376339600017907709695701997407319, + "angle_frac": 0.194171338937 + }, "identical_matrix_ids": [ "rrc_eq_8c569cbfc2385eab" ] @@ -2291,7 +2766,12 @@ ], "density": 0.1875, "frobenius": 3.7417, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864489715231793521517295125493431, + "layout": { + "radius_sq": 67752466607864489715231793521517295125493431, + "angle_frac": 0.338283774207 + } }, { "equation_id": "rrc_eq_603b460ebf696fbb", @@ -2311,7 +2791,12 @@ ], "density": 0.5156, "frobenius": 6.8557, - "trace": 5 + "trace": 5, + "spiral_index": 67754116753831194411098594657437819209085687, + "layout": { + "radius_sq": 67754116753831194411098594657437819209085687, + "angle_frac": 0.853855876705 + } }, { "equation_id": "rrc_eq_613c8a56dee0f83a", @@ -2331,7 +2816,12 @@ ], "density": 0.2812, "frobenius": 5.2915, - "trace": 1 + "trace": 1, + "spiral_index": 67752466627959330852768524470783465678220273, + "layout": { + "radius_sq": 67752466627959330852768524470783465678220273, + "angle_frac": 0.991160959722 + } }, { "equation_id": "rrc_eq_64f81fa3c4725d4e", @@ -2351,7 +2841,12 @@ ], "density": 0.0781, "frobenius": 2.2361, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738394836251, + "layout": { + "radius_sq": 67752466607864485891659577163645738394836251, + "angle_frac": 0.50564085807 + } }, { "equation_id": "rrc_eq_66f6066b3fb74fcb", @@ -2371,7 +2866,12 @@ ], "density": 0.375, "frobenius": 5.4772, - "trace": 3 + "trace": 3, + "spiral_index": 67760717343977657023600598077379367030554548, + "layout": { + "radius_sq": 67760717343977657023600598077379367030554548, + "angle_frac": 0.991879306641 + } }, { "equation_id": "rrc_eq_673652a4317dd847", @@ -2392,6 +2892,11 @@ "density": 0.0312, "frobenius": 1.4142, "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + }, "identical_matrix_ids": [ "rrc_eq_1038b814e5a78435" ] @@ -2414,7 +2919,12 @@ ], "density": 0.1719, "frobenius": 3.3166, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891647936469581837381117060, + "layout": { + "radius_sq": 67752466607864485891647936469581837381117060, + "angle_frac": 0.917222917103 + } }, { "equation_id": "rrc_eq_685a969028ff5c50", @@ -2434,7 +2944,12 @@ ], "density": 0.25, "frobenius": 4.2426, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864482068005875841009672653883997, + "layout": { + "radius_sq": 67752466607864482068005875841009672653883997, + "angle_frac": 0.905032475349 + } }, { "equation_id": "rrc_eq_68ac9a041d842bcf", @@ -2454,7 +2969,12 @@ ], "density": 0.3125, "frobenius": 4.6904, - "trace": 3 + "trace": 3, + "spiral_index": 67754941817395033219121728063905823158413641, + "layout": { + "radius_sq": 67754941817395033219121728063905823158413641, + "angle_frac": 0.190605655545 + } }, { "equation_id": "rrc_eq_68bc5f8d951cef23", @@ -2474,7 +2994,12 @@ ], "density": 0.3906, "frobenius": 5.3852, - "trace": 1 + "trace": 1, + "spiral_index": 67751641524205645354786148083601646955476839, + "layout": { + "radius_sq": 67751641524205645354786148083601646955476839, + "angle_frac": 0.206401435038 + } }, { "equation_id": "rrc_eq_6a952cb84d6e1fbf", @@ -2494,7 +3019,12 @@ ], "density": 0.2031, "frobenius": 4.1231, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891613014458269060156506201, + "layout": { + "radius_sq": 67752466607864485891613014458269060156506201, + "angle_frac": 0.794150193167 + } }, { "equation_id": "rrc_eq_6abda80c652b80c8", @@ -2514,7 +3044,12 @@ ], "density": 0.1719, "frobenius": 3.3166, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864489715266715568269535258213411, + "layout": { + "radius_sq": 67752466607864489715266715568269535258213411, + "angle_frac": 0.212623375356 + } }, { "equation_id": "rrc_eq_6d33c14a88eb0a12", @@ -2534,7 +3069,12 @@ ], "density": 0.5156, "frobenius": 8.3066, - "trace": 2 + "trace": 2, + "spiral_index": 67752466577721618144315654325086716074481539, + "layout": { + "radius_sq": 67752466577721618144315654325086716074481539, + "angle_frac": 0.828055449672 + } }, { "equation_id": "rrc_eq_6dcfafa9019b29a2", @@ -2555,6 +3095,11 @@ "density": 0.8594, "frobenius": 11.1803, "trace": 9, + "spiral_index": 67782169132278082472261723010787683133623861, + "layout": { + "radius_sq": 67782169132278082472261723010787683133623861, + "angle_frac": 0.911634099408 + }, "sparse_tail": true }, { @@ -2575,7 +3120,12 @@ ], "density": 0.3281, "frobenius": 6.8557, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891775984281475589561506929, + "layout": { + "radius_sq": 67752466607864485891775984281475589561506929, + "angle_frac": 0.004409426245 + } }, { "equation_id": "rrc_eq_7076f5bdea119531", @@ -2595,7 +3145,12 @@ ], "density": 0.1094, "frobenius": 2.6458, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645630503280759, + "layout": { + "radius_sq": 67752466607864485891659577163645630503280759, + "angle_frac": 0.6570245823 + } }, { "equation_id": "rrc_eq_7106bb20125b3d6f", @@ -2615,7 +3170,12 @@ ], "density": 0.4375, "frobenius": 6.3246, - "trace": 2 + "trace": 2, + "spiral_index": 67752466596561069643981445461118723496711031, + "layout": { + "radius_sq": 67752466596561069643981445461118723496711031, + "angle_frac": 0.655206789368 + } }, { "equation_id": "rrc_eq_71dd02d32f3e59b0", @@ -2635,7 +3195,12 @@ ], "density": 0.0938, "frobenius": 2.4495, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645630503280759, + "layout": { + "radius_sq": 67752466607864485891659577163645630503280759, + "angle_frac": 0.6570245823 + } }, { "equation_id": "rrc_eq_72b416376f1bf5b0", @@ -2655,7 +3220,12 @@ ], "density": 0.2188, "frobenius": 4.0, - "trace": 1 + "trace": 1, + "spiral_index": 67752466609120410834029352851887678078353217, + "layout": { + "radius_sq": 67752466609120410834029352851887678078353217, + "angle_frac": 0.499530664715 + } }, { "equation_id": "rrc_eq_74c2bb3396094843", @@ -2675,7 +3245,12 @@ ], "density": 0.75, "frobenius": 10.4881, - "trace": 7 + "trace": 7, + "spiral_index": 67819297276493054688460104787733152507885402, + "layout": { + "radius_sq": 67819297276493054688460104787733152507885402, + "angle_frac": 0.44056422031 + } }, { "equation_id": "rrc_eq_7533d46cedd4a4c5", @@ -2695,7 +3270,12 @@ ], "density": 0.1094, "frobenius": 2.6458, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_75b10c1207c769bb", @@ -2715,7 +3295,12 @@ ], "density": 0.1562, "frobenius": 3.1623, - "trace": 2 + "trace": 2, + "spiral_index": 67752466607864485891659577234523801077296683, + "layout": { + "radius_sq": 67752466607864485891659577234523801077296683, + "angle_frac": 0.008179185679 + } }, { "equation_id": "rrc_eq_7731084327989290", @@ -2735,7 +3320,12 @@ ], "density": 0.3438, "frobenius": 5.4772, - "trace": 2 + "trace": 2, + "spiral_index": 67754116767646525544383644290787144395384661, + "layout": { + "radius_sq": 67754116767646525544383644290787144395384661, + "angle_frac": 0.055568393249 + } }, { "equation_id": "rrc_eq_774c019464fd328c", @@ -2755,7 +3345,12 @@ ], "density": 0.1094, "frobenius": 2.6458, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_77bd06f725c27b4d", @@ -2775,7 +3370,12 @@ ], "density": 0.7188, "frobenius": 10.198, - "trace": 3 + "trace": 3, + "spiral_index": 67732664931620535513470774940835356123363103, + "layout": { + "radius_sq": 67732664931620535513470774940835356123363103, + "angle_frac": 0.224396722488 + } }, { "equation_id": "rrc_eq_78fb56a55b615659", @@ -2795,7 +3395,12 @@ ], "density": 0.1719, "frobenius": 3.3166, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891659577128206491270166580, + "layout": { + "radius_sq": 67752466607864485891659577128206491270166580, + "angle_frac": 0.299457809436 + } }, { "equation_id": "rrc_eq_795413454087e025", @@ -2815,7 +3420,12 @@ ], "density": 0.2031, "frobenius": 3.6056, - "trace": 2 + "trace": 2, + "spiral_index": 67752466607864478244491863024335899457065720, + "layout": { + "radius_sq": 67752466607864478244491863024335899457065720, + "angle_frac": 0.602466843656 + } }, { "equation_id": "rrc_eq_7956fd7c6e98638a", @@ -2835,7 +3445,12 @@ ], "density": 0.2344, "frobenius": 5.3852, - "trace": 3 + "trace": 3, + "spiral_index": 67752466607864485891519889260149891726570465, + "layout": { + "radius_sq": 67752466607864485891519889260149891726570465, + "angle_frac": 0.18308129211 + } }, { "equation_id": "rrc_eq_7995b3bdb3f05ce3", @@ -2855,7 +3470,12 @@ ], "density": 0.0781, "frobenius": 2.2361, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_7a38c905340961db", @@ -2875,7 +3495,12 @@ ], "density": 0.2344, "frobenius": 4.7958, - "trace": 2 + "trace": 2, + "spiral_index": 67752466607864485891764342701437523403174983, + "layout": { + "radius_sq": 67752466607864485891764342701437523403174983, + "angle_frac": 0.188613354984 + } }, { "equation_id": "rrc_eq_7cdf1c3e052e1f33", @@ -2896,6 +3521,11 @@ "density": 1.2031, "frobenius": 15.7162, "trace": 7, + "spiral_index": 66874592516654287526085086135562935829037103, + "layout": { + "radius_sq": 66874592516654287526085086135562935829037103, + "angle_frac": 0.971371391789 + }, "sparse_tail": true }, { @@ -2916,7 +3546,12 @@ ], "density": 0.1719, "frobenius": 3.3166, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864489715243434357337429395032043, + "layout": { + "radius_sq": 67752466607864489715243434357337429395032043, + "angle_frac": 0.938794058334 + } }, { "equation_id": "rrc_eq_80edc83f7fb3d80e", @@ -2936,7 +3571,12 @@ ], "density": 0.0938, "frobenius": 2.4495, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864482068064079382207456188051371, + "layout": { + "radius_sq": 67752466607864482068064079382207456188051371, + "angle_frac": 0.192791093082 + } }, { "equation_id": "rrc_eq_810420419a4025f0", @@ -2956,7 +3596,12 @@ ], "density": 0.25, "frobenius": 4.4721, - "trace": 1 + "trace": 1, + "spiral_index": 67754116755087115529721543364217225179905094, + "layout": { + "radius_sq": 67754116755087115529721543364217225179905094, + "angle_frac": 0.758349975944 + } }, { "equation_id": "rrc_eq_811d99697e055c2b", @@ -2977,6 +3622,11 @@ "density": 0.3125, "frobenius": 4.4721, "trace": 0, + "spiral_index": 67752466609120410834006071428319873682400501, + "layout": { + "radius_sq": 67752466609120410834006071428319873682400501, + "angle_frac": 0.996386029156 + }, "identical_matrix_ids": [ "rrc_eq_f691b1b9f433854f" ] @@ -2999,7 +3649,12 @@ ], "density": 0.1406, "frobenius": 3.0, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891647936505021084506115198, + "layout": { + "radius_sq": 67752466607864485891647936505021084506115198, + "angle_frac": 0.353223254026 + } }, { "equation_id": "rrc_eq_82aaddc592cb524f", @@ -3019,7 +3674,12 @@ ], "density": 0.3125, "frobenius": 4.899, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864482067970953794257540412391039, + "layout": { + "radius_sq": 67752466607864482067970953794257540412391039, + "angle_frac": 0.503593827931 + } }, { "equation_id": "rrc_eq_84f94841b9e9578b", @@ -3039,7 +3699,12 @@ ], "density": 0.0469, "frobenius": 1.7321, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_8500000bbf612a0e", @@ -3059,7 +3724,12 @@ ], "density": 0.2031, "frobenius": 4.1231, - "trace": 2 + "trace": 2, + "spiral_index": 67752466607864485891659577163645630502623819, + "layout": { + "radius_sq": 67752466607864485891659577163645630502623819, + "angle_frac": 0.905593938222 + } }, { "equation_id": "rrc_eq_85435dde0bcc5cfd", @@ -3079,7 +3749,12 @@ ], "density": 0.1875, "frobenius": 3.7417, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891647936398703343131449251, + "layout": { + "radius_sq": 67752466607864485891647936398703343131449251, + "angle_frac": 0.275039531547 + } }, { "equation_id": "rrc_eq_86ccde7bfd669b77", @@ -3099,7 +3774,12 @@ ], "density": 0.25, "frobenius": 4.4721, - "trace": 1 + "trace": 1, + "spiral_index": 67752466612888204779034684355188564197929045, + "layout": { + "radius_sq": 67752466612888204779034684355188564197929045, + "angle_frac": 0.185993458979 + } }, { "equation_id": "rrc_eq_87b4887fb400c8c8", @@ -3119,7 +3799,12 @@ ], "density": 0.1562, "frobenius": 3.1623, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891659577092767459929593301, + "layout": { + "radius_sq": 67752466607864485891659577092767459929593301, + "angle_frac": 0.15372125596 + } }, { "equation_id": "rrc_eq_891a81dfc968f58e", @@ -3139,7 +3824,12 @@ ], "density": 0.1406, "frobenius": 3.0, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891659577128206599162050541, + "layout": { + "radius_sq": 67752466607864485891659577128206599162050541, + "angle_frac": 0.141823395995 + } }, { "equation_id": "rrc_eq_8a05e2496e67848b", @@ -3160,6 +3850,11 @@ "density": 0.5781, "frobenius": 7.8102, "trace": 2, + "spiral_index": 67763192420379059263501754565924597888694125, + "layout": { + "radius_sq": 67763192420379059263501754565924597888694125, + "angle_frac": 0.572107025165 + }, "identical_matrix_ids": [ "rrc_eq_a9bdc40d07c74659" ] @@ -3183,6 +3878,11 @@ "density": 0.0312, "frobenius": 1.4142, "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + }, "identical_matrix_ids": [ "rrc_eq_dd01aec7b2c20774" ] @@ -3205,7 +3905,12 @@ ], "density": 0.2344, "frobenius": 3.873, - "trace": 2 + "trace": 2, + "spiral_index": 67752466607864485891682858303699565793103137, + "layout": { + "radius_sq": 67752466607864485891682858303699565793103137, + "angle_frac": 0.03933387252 + } }, { "equation_id": "rrc_eq_8b812bf47cc024b4", @@ -3226,6 +3931,11 @@ "density": 0.1406, "frobenius": 3.0, "trace": 1, + "spiral_index": 67752466607864485891659577128206599162050541, + "layout": { + "radius_sq": 67752466607864485891659577128206599162050541, + "angle_frac": 0.141823395995 + }, "identical_matrix_ids": [ "rrc_eq_185011f4d6cf6a2b" ] @@ -3248,7 +3958,12 @@ ], "density": 0.1719, "frobenius": 3.6056, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891671217786831037267660609, + "layout": { + "radius_sq": 67752466607864485891671217786831037267660609, + "angle_frac": 0.21504243725 + } }, { "equation_id": "rrc_eq_8c569cbfc2385eab", @@ -3269,6 +3984,11 @@ "density": 0.4062, "frobenius": 5.831, "trace": 4, + "spiral_index": 67752466610376339600017907709695701997407319, + "layout": { + "radius_sq": 67752466610376339600017907709695701997407319, + "angle_frac": 0.194171338937 + }, "identical_matrix_ids": [ "rrc_eq_5e10957e0cbb9de8" ] @@ -3291,7 +4011,12 @@ ], "density": 0.1094, "frobenius": 2.6458, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_9064d88b17992de3", @@ -3311,7 +4036,12 @@ ], "density": 0.3125, "frobenius": 5.2915, - "trace": 2 + "trace": 2, + "spiral_index": 67753704208861946492297246158985455718312172, + "layout": { + "radius_sq": 67753704208861946492297246158985455718312172, + "angle_frac": 0.645332200008 + } }, { "equation_id": "rrc_eq_90bbd1bf7d23655e", @@ -3331,7 +4061,12 @@ ], "density": 0.5469, "frobenius": 8.0623, - "trace": 2 + "trace": 2, + "spiral_index": 67695536750983602316270656801671825632215577, + "layout": { + "radius_sq": 67695536750983602316270656801671825632215577, + "angle_frac": 0.678051598381 + } }, { "equation_id": "rrc_eq_9166088a2f79f059", @@ -3351,7 +4086,12 @@ ], "density": 0.4219, "frobenius": 5.7446, - "trace": 3 + "trace": 3, + "spiral_index": 67752466610376366365174751414821390075697724, + "layout": { + "radius_sq": 67752466610376366365174751414821390075697724, + "angle_frac": 0.334095140663 + } }, { "equation_id": "rrc_eq_931cb5c74aaade03", @@ -3371,7 +4111,12 @@ ], "density": 0.4375, "frobenius": 7.0711, - "trace": 2 + "trace": 2, + "spiral_index": 67749166343561700531123131578892515872725251, + "layout": { + "radius_sq": 67749166343561700531123131578892515872725251, + "angle_frac": 0.846590197156 + } }, { "equation_id": "rrc_eq_9781272a1dff3d7d", @@ -3391,7 +4136,12 @@ ], "density": 0.0781, "frobenius": 2.2361, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_9817626505a4fedf", @@ -3411,7 +4161,12 @@ ], "density": 0.1875, "frobenius": 3.7417, - "trace": 0 + "trace": 0, + "spiral_index": 67751641540532830196836952448915090502455456, + "layout": { + "radius_sq": 67751641540532830196836952448915090502455456, + "angle_frac": 0.704576851702 + } }, { "equation_id": "rrc_eq_982c784b74af6c5c", @@ -3431,7 +4186,12 @@ ], "density": 0.25, "frobenius": 4.4721, - "trace": 1 + "trace": 1, + "spiral_index": 67752466610376366365163110579000068996420949, + "layout": { + "radius_sq": 67752466610376366365163110579000068996420949, + "angle_frac": 0.830777348004 + } }, { "equation_id": "rrc_eq_98b0599e8c46c1bf", @@ -3451,7 +4211,12 @@ ], "density": 0.3594, "frobenius": 6.4031, - "trace": 1 + "trace": 1, + "spiral_index": 67752466577722080801082066382610983523172865, + "layout": { + "radius_sq": 67752466577722080801082066382610983523172865, + "angle_frac": 0.359182094737 + } }, { "equation_id": "rrc_eq_9a468347631152ce", @@ -3471,7 +4236,12 @@ ], "density": 0.1719, "frobenius": 3.6056, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891647936505020652938579355, + "layout": { + "radius_sq": 67752466607864485891647936505020652938579355, + "angle_frac": 0.36572691904 + } }, { "equation_id": "rrc_eq_9c22fd7b336c5904", @@ -3491,7 +4261,12 @@ ], "density": 0.0, "frobenius": 0.0, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_9c2c0d5c61628eb5", @@ -3511,7 +4286,12 @@ ], "density": 0.3125, "frobenius": 6.0, - "trace": 2 + "trace": 2, + "spiral_index": 67752466607864462950028387323648685285105275, + "layout": { + "radius_sq": 67752466607864462950028387323648685285105275, + "angle_frac": 0.98557559299 + } }, { "equation_id": "rrc_eq_9d1897c1a7967172", @@ -3531,7 +4311,12 @@ ], "density": 0.4062, "frobenius": 6.3246, - "trace": 3 + "trace": 3, + "spiral_index": 67755766842025042046312969616387156834519548, + "layout": { + "radius_sq": 67755766842025042046312969616387156834519548, + "angle_frac": 0.893324273111 + } }, { "equation_id": "rrc_eq_9d485a8333644b3b", @@ -3551,7 +4336,12 @@ ], "density": 0.2188, "frobenius": 3.7417, - "trace": 1 + "trace": 1, + "spiral_index": 67752879144042171270989795730867980362961493, + "layout": { + "radius_sq": 67752879144042171270989795730867980362961493, + "angle_frac": 0.515700727619 + } }, { "equation_id": "rrc_eq_9f67a9105f9e0e3c", @@ -3571,7 +4361,12 @@ ], "density": 0.3438, "frobenius": 5.2915, - "trace": 3 + "trace": 3, + "spiral_index": 67752466605352620712584597437664550036022790, + "layout": { + "radius_sq": 67752466605352620712584597437664550036022790, + "angle_frac": 0.457541957673 + } }, { "equation_id": "rrc_eq_a109587e866701dc", @@ -3591,7 +4386,12 @@ ], "density": 0.3438, "frobenius": 6.0, - "trace": 2 + "trace": 2, + "spiral_index": 67752466592793313935035858833875431465407507, + "layout": { + "radius_sq": 67752466592793313935035858833875431465407507, + "angle_frac": 0.720003725379 + } }, { "equation_id": "rrc_eq_a4348738394b0597", @@ -3611,7 +4411,12 @@ ], "density": 0.2188, "frobenius": 3.7417, - "trace": 2 + "trace": 2, + "spiral_index": 67752466606608560949266520264471692847809445, + "layout": { + "radius_sq": 67752466606608560949266520264471692847809445, + "angle_frac": 0.098274389864 + } }, { "equation_id": "rrc_eq_a4adf8b5cc0e5c73", @@ -3631,7 +4436,12 @@ ], "density": 0.2188, "frobenius": 5.2915, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891345279380780083390827653, + "layout": { + "radius_sq": 67752466607864485891345279380780083390827653, + "angle_frac": 0.865965772112 + } }, { "equation_id": "rrc_eq_a59af904a8ad739f", @@ -3651,7 +4461,12 @@ ], "density": 0.4219, "frobenius": 6.245, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864478244468581104618958989090225, + "layout": { + "radius_sq": 67752466607864478244468581104618958989090225, + "angle_frac": 0.51310128013 + } }, { "equation_id": "rrc_eq_a5dae5efe3dc9a94", @@ -3671,7 +4486,12 @@ ], "density": 0.2656, "frobenius": 5.1962, - "trace": 2 + "trace": 2, + "spiral_index": 67752466607864485891659577057328860153928113, + "layout": { + "radius_sq": 67752466607864485891659577057328860153928113, + "angle_frac": 0.045486551156 + } }, { "equation_id": "rrc_eq_a5fbdc2a7f09759e", @@ -3692,6 +4512,11 @@ "density": 1.0625, "frobenius": 11.225, "trace": 2, + "spiral_index": 67622105603988035813765072947122138764312207, + "layout": { + "radius_sq": 67622105603988035813765072947122138764312207, + "angle_frac": 0.920757979415 + }, "sparse_tail": true }, { @@ -3712,7 +4537,12 @@ ], "density": 0.3438, "frobenius": 5.2915, - "trace": 1 + "trace": 1, + "spiral_index": 67752466616655964311936629677382034579900643, + "layout": { + "radius_sq": 67752466616655964311936629677382034579900643, + "angle_frac": 0.343097850904 + } }, { "equation_id": "rrc_eq_a91f2f772995a9b9", @@ -3732,7 +4562,12 @@ ], "density": 0.125, "frobenius": 2.8284, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891659577163645738395164719, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164719, + "angle_frac": 0.117424157609 + } }, { "equation_id": "rrc_eq_a9bdc40d07c74659", @@ -3753,6 +4588,11 @@ "density": 0.5781, "frobenius": 7.8102, "trace": 2, + "spiral_index": 67763192420379059263501754565924597888694125, + "layout": { + "radius_sq": 67763192420379059263501754565924597888694125, + "angle_frac": 0.572107025165 + }, "identical_matrix_ids": [ "rrc_eq_8a05e2496e67848b" ] @@ -3775,7 +4615,12 @@ ], "density": 0.2656, "frobenius": 4.3589, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891671217822269960715692989, + "layout": { + "radius_sq": 67752466607864485891671217822269960715692989, + "angle_frac": 0.530914782589 + } }, { "equation_id": "rrc_eq_aafdb23c6c8cb77a", @@ -3795,7 +4640,12 @@ ], "density": 0.2656, "frobenius": 4.3589, - "trace": 2 + "trace": 2, + "spiral_index": 67752466610376335776364206387059096797692201, + "layout": { + "radius_sq": 67752466610376335776364206387059096797692201, + "angle_frac": 0.515131678749 + } }, { "equation_id": "rrc_eq_ac1a7a22801b7d77", @@ -3816,6 +4666,11 @@ "density": 1.9688, "frobenius": 22.0, "trace": 7, + "spiral_index": 261965656833193854361831125044014155968, + "layout": { + "radius_sq": 261965656833193854361831125044014155968, + "angle_frac": 0.095399085487 + }, "sparse_tail": true, "identical_matrix_ids": [ "rrc_eq_3f87d2c06726bc30" @@ -3839,7 +4694,12 @@ ], "density": 0.2344, "frobenius": 4.5826, - "trace": 2 + "trace": 2, + "spiral_index": 67752466612888216249925943414489597290571183, + "layout": { + "radius_sq": 67752466612888216249925943414489597290571183, + "angle_frac": 0.940345963835 + } }, { "equation_id": "rrc_eq_aef93abc672b8e29", @@ -3859,7 +4719,12 @@ ], "density": 0.1406, "frobenius": 3.3166, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891647936505021084505458261, + "layout": { + "radius_sq": 67752466607864485891647936505021084505458261, + "angle_frac": 0.747690643698 + } }, { "equation_id": "rrc_eq_b20eddced9a6b7da", @@ -3879,7 +4744,12 @@ ], "density": 0.2969, "frobenius": 4.3589, - "trace": 2 + "trace": 2, + "spiral_index": 67753704215141609440066180332384223225333169, + "layout": { + "radius_sq": 67753704215141609440066180332384223225333169, + "angle_frac": 0.720391052357 + } }, { "equation_id": "rrc_eq_b2fc5edc90c4c538", @@ -3899,7 +4769,12 @@ ], "density": 0.4375, "frobenius": 5.831, - "trace": 3 + "trace": 3, + "spiral_index": 67752466610376351070571587952393699358518513, + "layout": { + "radius_sq": 67752466610376351070571587952393699358518513, + "angle_frac": 0.151921195249 + } }, { "equation_id": "rrc_eq_b639be44c38e19f1", @@ -3919,7 +4794,12 @@ ], "density": 0.375, "frobenius": 5.4772, - "trace": 1 + "trace": 1, + "spiral_index": 67749166317187043502265291091282771355364380, + "layout": { + "radius_sq": 67749166317187043502265291091282771355364380, + "angle_frac": 0.607026305762 + } }, { "equation_id": "rrc_eq_b650dd7bdbcd9bcb", @@ -3939,7 +4819,12 @@ ], "density": 0.0938, "frobenius": 2.4495, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_b720db642290ed9d", @@ -3959,7 +4844,12 @@ ], "density": 0.1562, "frobenius": 3.1623, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891647936434142698148659820, + "layout": { + "radius_sq": 67752466607864485891647936434142698148659820, + "angle_frac": 0.929120777068 + } }, { "equation_id": "rrc_eq_b8bfc827c0fd3d28", @@ -3979,7 +4869,12 @@ ], "density": 0.2656, "frobenius": 4.1231, - "trace": 0 + "trace": 0, + "spiral_index": 67751228996819541632904548000412026727427471, + "layout": { + "radius_sq": 67751228996819541632904548000412026727427471, + "angle_frac": 0.316384337954 + } }, { "equation_id": "rrc_eq_b97583b24c3b2936", @@ -4000,6 +4895,11 @@ "density": 0.9531, "frobenius": 13.2288, "trace": 14, + "spiral_index": 68207911466286194657455857485501791864865563, + "layout": { + "radius_sq": 68207911466286194657455857485501791864865563, + "angle_frac": 0.261107428837 + }, "sparse_tail": true }, { @@ -4020,7 +4920,12 @@ ], "density": 0.3281, "frobenius": 5.1962, - "trace": 1 + "trace": 1, + "spiral_index": 67752466602840786122227037045177350456212565, + "layout": { + "radius_sq": 67752466602840786122227037045177350456212565, + "angle_frac": 0.648622566018 + } }, { "equation_id": "rrc_eq_b9eb3119b4d99483", @@ -4041,6 +4946,11 @@ "density": 0.4688, "frobenius": 6.3246, "trace": 3, + "spiral_index": 67753291665148711459155795982587265377878668, + "layout": { + "radius_sq": 67753291665148711459155795982587265377878668, + "angle_frac": 0.874358636817 + }, "identical_matrix_ids": [ "rrc_eq_35e1c2bc2da6d854" ] @@ -4063,7 +4973,12 @@ ], "density": 0.1094, "frobenius": 2.6458, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577128206599162379011, + "layout": { + "radius_sq": 67752466607864485891659577128206599162379011, + "angle_frac": 0.517538718034 + } }, { "equation_id": "rrc_eq_bb62cba4864b0def", @@ -4083,7 +4998,12 @@ ], "density": 0.4531, "frobenius": 7.2801, - "trace": 4 + "trace": 4, + "spiral_index": 67768968023573498385084938933193716640520549, + "layout": { + "radius_sq": 67768968023573498385084938933193716640520549, + "angle_frac": 0.599488725407 + } }, { "equation_id": "rrc_eq_bcd458bef84fe2a2", @@ -4103,7 +5023,12 @@ ], "density": 0.0938, "frobenius": 2.4495, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_bd8bcf9cb663c096", @@ -4123,7 +5048,12 @@ ], "density": 0.1406, "frobenius": 3.0, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891636295846396430617065678, + "layout": { + "radius_sq": 67752466607864485891636295846396430617065678, + "angle_frac": 0.970988361693 + } }, { "equation_id": "rrc_eq_bedb0334896533f3", @@ -4143,7 +5073,12 @@ ], "density": 0.1562, "frobenius": 3.7417, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864455302895594912139480738257928, + "layout": { + "radius_sq": 67752466607864455302895594912139480738257928, + "angle_frac": 0.046597562643 + } }, { "equation_id": "rrc_eq_bf1b905e94089ddc", @@ -4163,7 +5098,12 @@ ], "density": 0.1875, "frobenius": 4.2426, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577092767459928279426, + "layout": { + "radius_sq": 67752466607864485891659577092767459928279426, + "angle_frac": 0.560690024053 + } }, { "equation_id": "rrc_eq_bf9f2062b96a9d25", @@ -4183,7 +5123,12 @@ ], "density": 0.2812, "frobenius": 4.899, - "trace": 1 + "trace": 1, + "spiral_index": 67752466617911938960978032643451134954393034, + "layout": { + "radius_sq": 67752466617911938960978032643451134954393034, + "angle_frac": 0.300559617102 + } }, { "equation_id": "rrc_eq_bfd316d8427b2f6c", @@ -4203,7 +5148,12 @@ ], "density": 0.1094, "frobenius": 2.6458, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_c221ccc2bc9ccc45", @@ -4223,7 +5173,12 @@ ], "density": 0.0312, "frobenius": 1.4142, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_c3dde450e7ce933a", @@ -4243,7 +5198,12 @@ ], "density": 0.0625, "frobenius": 2.0, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738394836251, + "layout": { + "radius_sq": 67752466607864485891659577163645738394836251, + "angle_frac": 0.50564085807 + } }, { "equation_id": "rrc_eq_c3f6aa5efce88262", @@ -4263,7 +5223,12 @@ ], "density": 0.375, "frobenius": 6.4807, - "trace": 3 + "trace": 3, + "spiral_index": 67752466607864524128138384828771418274764006, + "layout": { + "radius_sq": 67752466607864524128138384828771418274764006, + "angle_frac": 0.767631701437 + } }, { "equation_id": "rrc_eq_c5417aae2492b416", @@ -4284,6 +5249,11 @@ "density": 1.7344, "frobenius": 21.8861, "trace": 11, + "spiral_index": 71683075630423873159344993461581440857958381, + "layout": { + "radius_sq": 71683075630423873159344993461581440857958381, + "angle_frac": 0.787556402625 + }, "sparse_tail": true }, { @@ -4304,7 +5274,12 @@ ], "density": 0.1719, "frobenius": 3.3166, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891659577199084769735737998, + "layout": { + "radius_sq": 67752466607864485891659577199084769735737998, + "angle_frac": 0.263160711085 + } }, { "equation_id": "rrc_eq_c57a3f3edc39ddd3", @@ -4324,7 +5299,12 @@ ], "density": 0.25, "frobenius": 4.2426, - "trace": 2 + "trace": 2, + "spiral_index": 67752466606608545654884529138718995586234955, + "layout": { + "radius_sq": 67752466606608545654884529138718995586234955, + "angle_frac": 0.253841811414 + } }, { "equation_id": "rrc_eq_c5a00dead68e12a0", @@ -4344,7 +5324,12 @@ ], "density": 0.1094, "frobenius": 2.6458, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_c704bc7e7c531303", @@ -4364,7 +5349,12 @@ ], "density": 0.0938, "frobenius": 2.4495, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891659577163645738395164719, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164719, + "angle_frac": 0.117424157609 + } }, { "equation_id": "rrc_eq_c8b7f0fe52ef32fe", @@ -4384,7 +5374,12 @@ ], "density": 0.1875, "frobenius": 3.7417, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891636295846396214832640818, + "layout": { + "radius_sq": 67752466607864485891636295846396214832640818, + "angle_frac": 0.298758566996 + } }, { "equation_id": "rrc_eq_c8d2e5596d91ebbd", @@ -4404,7 +5399,12 @@ ], "density": 0.25, "frobenius": 4.0, - "trace": 3 + "trace": 3, + "spiral_index": 67752054076710519399704465823404814112599619, + "layout": { + "radius_sq": 67752054076710519399704465823404814112599619, + "angle_frac": 0.932690730307 + } }, { "equation_id": "rrc_eq_ca946ab1632d585c", @@ -4424,7 +5424,12 @@ ], "density": 0.3125, "frobenius": 5.6569, - "trace": 2 + "trace": 2, + "spiral_index": 67749166323466672037593260302413894949762114, + "layout": { + "radius_sq": 67749166323466672037593260302413894949762114, + "angle_frac": 0.838758156518 + } }, { "equation_id": "rrc_eq_cabf5eab335f2d23", @@ -4444,7 +5449,12 @@ ], "density": 0.2188, "frobenius": 4.0, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864478244456940764948392360095643, + "layout": { + "radius_sq": 67752466607864478244456940764948392360095643, + "angle_frac": 0.849522202574 + } }, { "equation_id": "rrc_eq_cbefaa1738883221", @@ -4464,7 +5474,12 @@ ], "density": 0.1094, "frobenius": 2.6458, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645630503280759, + "layout": { + "radius_sq": 67752466607864485891659577163645630503280759, + "angle_frac": 0.6570245823 + } }, { "equation_id": "rrc_eq_cc8b5f7c4742473c", @@ -4484,7 +5499,12 @@ ], "density": 0.2188, "frobenius": 4.2426, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891566451752891734567529325, + "layout": { + "radius_sq": 67752466607864485891566451752891734567529325, + "angle_frac": 0.779896652988 + } }, { "equation_id": "rrc_eq_cd4dfc767616524d", @@ -4504,7 +5524,12 @@ ], "density": 0.1406, "frobenius": 3.0, - "trace": 0 + "trace": 0, + "spiral_index": 67752879142786246328620020078065395696326627, + "layout": { + "radius_sq": 67752879142786246328620020078065395696326627, + "angle_frac": 0.182142855706 + } }, { "equation_id": "rrc_eq_ce049f9298cfb095", @@ -4525,6 +5550,11 @@ "density": 0.9531, "frobenius": 10.7238, "trace": 10, + "spiral_index": 67806096300916720971641907955999425169808751, + "layout": { + "radius_sq": 67806096300916720971641907955999425169808751, + "angle_frac": 0.223703118699 + }, "sparse_tail": true }, { @@ -4545,7 +5575,12 @@ ], "density": 0.375, "frobenius": 7.4833, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485889797068948568359145796755, + "layout": { + "radius_sq": 67752466607864485889797068948568359145796755, + "angle_frac": 0.667930409152 + } }, { "equation_id": "rrc_eq_d07532a1db76d958", @@ -4565,7 +5600,12 @@ ], "density": 0.125, "frobenius": 2.8284, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645630503280759, + "layout": { + "radius_sq": 67752466607864485891659577163645630503280759, + "angle_frac": 0.6570245823 + } }, { "equation_id": "rrc_eq_d24270e4be19de76", @@ -4585,7 +5625,12 @@ ], "density": 0.1719, "frobenius": 3.3166, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891682858480894830389495839, + "layout": { + "radius_sq": 67752466607864485891682858480894830389495839, + "angle_frac": 0.961094791657 + } }, { "equation_id": "rrc_eq_d356d2da175a4185", @@ -4605,7 +5650,12 @@ ], "density": 0.4531, "frobenius": 6.5574, - "trace": 1 + "trace": 1, + "spiral_index": 67752466548835711535746887030592807433504506, + "layout": { + "radius_sq": 67752466548835711535746887030592807433504506, + "angle_frac": 0.499769390642 + } }, { "equation_id": "rrc_eq_d4e90c1cd69ef948", @@ -4625,7 +5675,12 @@ ], "density": 0.5469, "frobenius": 7.2801, - "trace": 3 + "trace": 3, + "spiral_index": 67756591935731366241059304324421273749471660, + "layout": { + "radius_sq": 67756591935731366241059304324421273749471660, + "angle_frac": 0.499038903419 + } }, { "equation_id": "rrc_eq_d521b2282dde0c38", @@ -4645,7 +5700,12 @@ ], "density": 0.5625, "frobenius": 7.746, - "trace": 4 + "trace": 4, + "spiral_index": 67745865918499276053947415621523519282651677, + "layout": { + "radius_sq": 67745865918499276053947415621523519282651677, + "angle_frac": 0.986209415841 + } }, { "equation_id": "rrc_eq_d618a97b4f87abe9", @@ -4665,7 +5725,12 @@ ], "density": 0.2031, "frobenius": 3.6056, - "trace": 1 + "trace": 1, + "spiral_index": 67752466606608557125694303623087453821745500, + "layout": { + "radius_sq": 67752466606608557125694303623087453821745500, + "angle_frac": 0.174749603039 + } }, { "equation_id": "rrc_eq_d726df3a6c9943ff", @@ -4685,7 +5750,12 @@ ], "density": 0.5312, "frobenius": 6.9282, - "trace": 2 + "trace": 2, + "spiral_index": 67753704245284026001988935965396880608234031, + "layout": { + "radius_sq": 67753704245284026001988935965396880608234031, + "angle_frac": 0.496910241572 + } }, { "equation_id": "rrc_eq_d75b1352c39fe13e", @@ -4705,7 +5775,12 @@ ], "density": 0.6719, "frobenius": 9.3274, - "trace": 6 + "trace": 6, + "spiral_index": 67745866054140523385646133253572385469108268, + "layout": { + "radius_sq": 67745866054140523385646133253572385469108268, + "angle_frac": 0.182331219268 + } }, { "equation_id": "rrc_eq_d76203fbca4e9b81", @@ -4725,7 +5800,12 @@ ], "density": 0.2031, "frobenius": 3.6056, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645522610411391, + "layout": { + "radius_sq": 67752466607864485891659577163645522610411391, + "angle_frac": 0.833411063374 + } }, { "equation_id": "rrc_eq_d767dc5b5996f6dc", @@ -4745,7 +5825,12 @@ ], "density": 0.0625, "frobenius": 2.0, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891659577163645738395164719, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164719, + "angle_frac": 0.117424157609 + } }, { "equation_id": "rrc_eq_d93085afc737effa", @@ -4765,7 +5850,12 @@ ], "density": 0.3438, "frobenius": 5.4772, - "trace": 1 + "trace": 1, + "spiral_index": 67751641540532795784395988089111087274746587, + "layout": { + "radius_sq": 67751641540532795784395988089111087274746587, + "angle_frac": 0.11862995366 + } }, { "equation_id": "rrc_eq_d9785ef71690f60b", @@ -4785,7 +5875,12 @@ ], "density": 0.4219, "frobenius": 6.4031, - "trace": 1 + "trace": 1, + "spiral_index": 67760717316347048286343087807256083523118165, + "layout": { + "radius_sq": 67760717316347048286343087807256083523118165, + "angle_frac": 0.699778796219 + } }, { "equation_id": "rrc_eq_dd01aec7b2c20774", @@ -4806,6 +5901,11 @@ "density": 0.0312, "frobenius": 1.4142, "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + }, "identical_matrix_ids": [ "rrc_eq_8a4d6790faf66d6b" ] @@ -4828,7 +5928,12 @@ ], "density": 0.1562, "frobenius": 3.1623, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864482068075720076271249309558131, + "layout": { + "radius_sq": 67752466607864482068075720076271249309558131, + "angle_frac": 0.563128125451 + } }, { "equation_id": "rrc_eq_decad728fbd76456", @@ -4848,7 +5953,12 @@ ], "density": 0.1562, "frobenius": 3.4641, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577057328320696807593, + "layout": { + "radius_sq": 67752466607864485891659577057328320696807593, + "angle_frac": 0.553835816385 + } }, { "equation_id": "rrc_eq_def9542a5004dc68", @@ -4868,7 +5978,12 @@ ], "density": 0.1094, "frobenius": 3.3166, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577021889181464021884, + "layout": { + "radius_sq": 67752466607864485891659577021889181464021884, + "angle_frac": 0.571984365561 + } }, { "equation_id": "rrc_eq_df9f885395884594", @@ -4888,7 +6003,12 @@ ], "density": 0.2344, "frobenius": 4.1231, - "trace": 1 + "trace": 1, + "spiral_index": 67752466610376366365151470097571758621946801, + "layout": { + "radius_sq": 67752466610376366365151470097571758621946801, + "angle_frac": 0.042528596319 + } }, { "equation_id": "rrc_eq_e0ac7e1847f830a3", @@ -4908,7 +6028,12 @@ ], "density": 0.0938, "frobenius": 2.4495, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_e22543ef62f2494e", @@ -4928,7 +6053,12 @@ ], "density": 0.0781, "frobenius": 2.2361, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891647936505021084506115199, + "layout": { + "radius_sq": 67752466607864485891647936505021084506115199, + "angle_frac": 0.735189265276 + } }, { "equation_id": "rrc_eq_e25b46d22b7ca0f1", @@ -4949,6 +6079,11 @@ "density": 0.0469, "frobenius": 1.7321, "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + }, "identical_matrix_ids": [ "rrc_eq_05370b4783a8bd6a", "rrc_eq_068487b9141c4fb6" @@ -4972,7 +6107,12 @@ ], "density": 0.3125, "frobenius": 5.4772, - "trace": 3 + "trace": 3, + "spiral_index": 67752466607864489715231793521516863556972177, + "layout": { + "radius_sq": 67752466607864489715231793521516863556972177, + "angle_frac": 0.841675461853 + } }, { "equation_id": "rrc_eq_e43c6929cd3bc3bf", @@ -4992,7 +6132,12 @@ ], "density": 0.2188, "frobenius": 4.0, - "trace": 0 + "trace": 0, + "spiral_index": 67753291680219871944748568022902719592053954, + "layout": { + "radius_sq": 67753291680219871944748568022902719592053954, + "angle_frac": 0.729923432092 + } }, { "equation_id": "rrc_eq_e4b70a718fcfb1ab", @@ -5013,6 +6158,11 @@ "density": 0.25, "frobenius": 4.6904, "trace": 0, + "spiral_index": 67752466605352620712468190638782636289721993, + "layout": { + "radius_sq": 67752466605352620712468190638782636289721993, + "angle_frac": 0.852243628637 + }, "identical_matrix_ids": [ "rrc_eq_2f44e729b9d25d34" ] @@ -5035,7 +6185,12 @@ ], "density": 0.3125, "frobenius": 4.899, - "trace": 0 + "trace": 0, + "spiral_index": 67752466605352620712526394002784184199227140, + "layout": { + "radius_sq": 67752466605352620712526394002784184199227140, + "angle_frac": 0.661953805046 + } }, { "equation_id": "rrc_eq_e58f768224fb1bbe", @@ -5055,7 +6210,12 @@ ], "density": 0.375, "frobenius": 5.4772, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864462950179715531377038271375763, + "layout": { + "radius_sq": 67752466607864462950179715531377038271375763, + "angle_frac": 0.593330425874 + } }, { "equation_id": "rrc_eq_e5f58db6423d2f9c", @@ -5075,7 +6235,12 @@ ], "density": 0.1094, "frobenius": 2.6458, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_e672df600fa82b76", @@ -5095,7 +6260,12 @@ ], "density": 0.1562, "frobenius": 4.0, - "trace": 3 + "trace": 3, + "spiral_index": 67752466607864485891659577163645630502623818, + "layout": { + "radius_sq": 67752466607864485891659577163645630502623818, + "angle_frac": 0.523627926972 + } }, { "equation_id": "rrc_eq_e6a6d86ede20e5ad", @@ -5115,7 +6285,12 @@ ], "density": 0.4062, "frobenius": 6.0, - "trace": 3 + "trace": 3, + "spiral_index": 67750816460641871547816632407374386990298124, + "layout": { + "radius_sq": 67750816460641871547816632407374386990298124, + "angle_frac": 0.107376901716 + } }, { "equation_id": "rrc_eq_e6b902735f906c33", @@ -5135,7 +6310,12 @@ ], "density": 0.5, "frobenius": 6.9282, - "trace": 1 + "trace": 1, + "spiral_index": 67742565728296180825409887985861273423435160, + "layout": { + "radius_sq": 67742565728296180825409887985861273423435160, + "angle_frac": 0.754525196436 + } }, { "equation_id": "rrc_eq_e9cff20a11527ba0", @@ -5155,7 +6335,12 @@ ], "density": 0.5156, "frobenius": 7.5498, - "trace": 3 + "trace": 3, + "spiral_index": 67752466592793248933446768255282799604892485, + "layout": { + "radius_sq": 67752466592793248933446768255282799604892485, + "angle_frac": 0.00100450964 + } }, { "equation_id": "rrc_eq_ea1df518da53e850", @@ -5175,7 +6360,12 @@ ], "density": 0.2344, "frobenius": 4.5826, - "trace": 1 + "trace": 1, + "spiral_index": 67752466604096676652307176545905255912963266, + "layout": { + "radius_sq": 67752466604096676652307176545905255912963266, + "angle_frac": 0.879735014101 + } }, { "equation_id": "rrc_eq_ec7566b5d400a6fb", @@ -5195,7 +6385,12 @@ ], "density": 0.2812, "frobenius": 5.099, - "trace": 1 + "trace": 1, + "spiral_index": 67752466617911900724953211231712213442713007, + "layout": { + "radius_sq": 67752466617911900724953211231712213442713007, + "angle_frac": 0.868593738369 + } }, { "equation_id": "rrc_eq_ecf3ddf7af735ee6", @@ -5215,7 +6410,12 @@ ], "density": 0.125, "frobenius": 2.8284, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645630503280759, + "layout": { + "radius_sq": 67752466607864485891659577163645630503280759, + "angle_frac": 0.6570245823 + } }, { "equation_id": "rrc_eq_ef9d2a2f3c8de320", @@ -5235,7 +6435,12 @@ ], "density": 0.2656, "frobenius": 4.7958, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864482068099001039127977948091106, + "layout": { + "radius_sq": 67752466607864482068099001039127977948091106, + "angle_frac": 0.407712051105 + } }, { "equation_id": "rrc_eq_f010fb33997b8f51", @@ -5255,7 +6460,12 @@ ], "density": 0.2812, "frobenius": 5.831, - "trace": 0 + "trace": 0, + "spiral_index": 67752466577722103741479346302076767236534620, + "layout": { + "radius_sq": 67752466577722103741479346302076767236534620, + "angle_frac": 0.322101905056 + } }, { "equation_id": "rrc_eq_f112b5836bdbd47d", @@ -5275,7 +6485,12 @@ ], "density": 0.1406, "frobenius": 3.0, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577199084877627293491, + "layout": { + "radius_sq": 67752466607864485891659577199084877627293491, + "angle_frac": 0.493742998105 + } }, { "equation_id": "rrc_eq_f26b20a02d1cf105", @@ -5295,7 +6510,12 @@ ], "density": 0.3281, "frobenius": 5.7446, - "trace": 1 + "trace": 1, + "spiral_index": 67752466622935761085617830081990216311745195, + "layout": { + "radius_sq": 67752466622935761085617830081990216311745195, + "angle_frac": 0.947013356374 + } }, { "equation_id": "rrc_eq_f4249695d9de4adc", @@ -5315,7 +6535,12 @@ ], "density": 0.6875, "frobenius": 8.3666, - "trace": 2 + "trace": 2, + "spiral_index": 67759067186707681377057082434840184130568271, + "layout": { + "radius_sq": 67759067186707681377057082434840184130568271, + "angle_frac": 0.094295673477 + } }, { "equation_id": "rrc_eq_f46446cfb0f8d5b1", @@ -5335,7 +6560,12 @@ ], "density": 0.4844, "frobenius": 7.4162, - "trace": 3 + "trace": 3, + "spiral_index": 67752466584001575509682923365126172514409533, + "layout": { + "radius_sq": 67752466584001575509682923365126172514409533, + "angle_frac": 0.551808381648 + } }, { "equation_id": "rrc_eq_f5bb28753a2271dd", @@ -5355,7 +6585,12 @@ ], "density": 0.3438, "frobenius": 5.6569, - "trace": 2 + "trace": 2, + "spiral_index": 67755766877191039846417366459233170633834281, + "layout": { + "radius_sq": 67755766877191039846417366459233170633834281, + "angle_frac": 0.721791878293 + } }, { "equation_id": "rrc_eq_f691b1b9f433854f", @@ -5376,6 +6611,11 @@ "density": 0.3125, "frobenius": 4.4721, "trace": 0, + "spiral_index": 67752466609120410834006071428319873682400501, + "layout": { + "radius_sq": 67752466609120410834006071428319873682400501, + "angle_frac": 0.996386029156 + }, "identical_matrix_ids": [ "rrc_eq_811d99697e055c2b" ] @@ -5398,7 +6638,12 @@ ], "density": 0.4375, "frobenius": 6.7823, - "trace": 2 + "trace": 2, + "spiral_index": 67673259709473019967913197895294758662414496, + "layout": { + "radius_sq": 67673259709473019967913197895294758662414496, + "angle_frac": 0.34206406097 + } }, { "equation_id": "rrc_eq_f9a9276cb08dd3bb", @@ -5418,7 +6663,12 @@ ], "density": 0.1562, "frobenius": 3.7417, - "trace": 2 + "trace": 2, + "spiral_index": 67752466607864485891659577092767459929593300, + "layout": { + "radius_sq": 67752466607864485891659577092767459929593300, + "angle_frac": 0.77175524471 + } }, { "equation_id": "rrc_eq_fc46c7ee6a40460d", @@ -5438,7 +6688,12 @@ ], "density": 0.4219, "frobenius": 7.0, - "trace": 5 + "trace": 5, + "spiral_index": 67752466589025470283242493395620193682926455, + "layout": { + "radius_sq": 67752466589025470283242493395620193682926455, + "angle_frac": 0.062020390696 + } }, { "equation_id": "rrc_eq_fe98a523c9c0b821", @@ -5458,7 +6713,12 @@ ], "density": 0.1094, "frobenius": 2.6458, - "trace": 0 + "trace": 0, + "spiral_index": 67752466607864485891659577163645738395164720, + "layout": { + "radius_sq": 67752466607864485891659577163645738395164720, + "angle_frac": 0.499390168859 + } }, { "equation_id": "rrc_eq_feea4fcff27bd600", @@ -5478,7 +6738,12 @@ ], "density": 0.1719, "frobenius": 3.3166, - "trace": 1 + "trace": 1, + "spiral_index": 67752466607864485891659577163645630502952289, + "layout": { + "radius_sq": 67752466607864485891659577163645630502952289, + "angle_frac": 0.281309260261 + } } ], "manifold_278": { @@ -5500,5 +6765,112 @@ "median_gap": 0.021671, "boundaries_match_250": true, "clusters": 9 + }, + "cartan_floor": { + "delta_exact": "17/1792", + "delta_source": "CartanConnection.lean:70 (docs/cartan_fingerprint.md)", + "delta_float": 0.009486607142857142, + "metric": "Fisher on \u0394\u2087: d_F = 2\u00b7arccos(\u03a3\u221a(p_i\u00b7q_i)); p_i = |c_i|/\u03a3|c_j| (all-zero fingerprint \u2192 uniform, by convention)", + "distinct_fingerprints": 196, + "pairs_below_delta": 13, + "sub_delta_pairs": [ + { + "representatives": [ + "rrc_eq_5a01598605abcd3f", + "rrc_eq_bb071a3f64f90363" + ], + "fisher_distance": 0.0 + }, + { + "representatives": [ + "rrc_eq_5a01598605abcd3f", + "rrc_eq_decad728fbd76456" + ], + "fisher_distance": 0.0 + }, + { + "representatives": [ + "rrc_eq_5a01598605abcd3f", + "rrc_eq_def9542a5004dc68" + ], + "fisher_distance": 0.0 + }, + { + "representatives": [ + "rrc_eq_6abda80c652b80c8", + "rrc_eq_dd3140340d9c9a33" + ], + "fisher_distance": 0.0 + }, + { + "representatives": [ + "rrc_eq_78fb56a55b615659", + "rrc_eq_c56ffe8dd188e331" + ], + "fisher_distance": 0.0 + }, + { + "representatives": [ + "rrc_eq_80edc83f7fb3d80e", + "rrc_eq_bedb0334896533f3" + ], + "fisher_distance": 0.0 + }, + { + "representatives": [ + "rrc_eq_a4adf8b5cc0e5c73", + "rrc_eq_bd8bcf9cb663c096" + ], + "fisher_distance": 0.0 + }, + { + "representatives": [ + "rrc_eq_a4adf8b5cc0e5c73", + "rrc_eq_e22543ef62f2494e" + ], + "fisher_distance": 0.0 + }, + { + "representatives": [ + "rrc_eq_bb071a3f64f90363", + "rrc_eq_decad728fbd76456" + ], + "fisher_distance": 0.0 + }, + { + "representatives": [ + "rrc_eq_bb071a3f64f90363", + "rrc_eq_def9542a5004dc68" + ], + "fisher_distance": 0.0 + }, + { + "representatives": [ + "rrc_eq_bd8bcf9cb663c096", + "rrc_eq_e22543ef62f2494e" + ], + "fisher_distance": 0.0 + }, + { + "representatives": [ + "rrc_eq_bf1b905e94089ddc", + "rrc_eq_f112b5836bdbd47d" + ], + "fisher_distance": 0.0 + }, + { + "representatives": [ + "rrc_eq_decad728fbd76456", + "rrc_eq_def9542a5004dc68" + ], + "fisher_distance": 0.0 + } + ], + "delta_resolution_codewords": 187, + "min_fisher_distance": 0.0, + "min_fisher_pair": [ + "rrc_eq_5a01598605abcd3f", + "rrc_eq_bb071a3f64f90363" + ] } } diff --git a/docs/SPECTRAL_CODEBOOK_GENERATOR.md b/docs/SPECTRAL_CODEBOOK_GENERATOR.md index df47b3f1..941dc740 100644 --- a/docs/SPECTRAL_CODEBOOK_GENERATOR.md +++ b/docs/SPECTRAL_CODEBOOK_GENERATOR.md @@ -3,7 +3,7 @@ **Date:** 2026-07-01 **Module:** `python/spectral_codebook.py` **Output:** `data/spectral_codebook.json` -**Tests:** `tests/test_spectral_codebook.py` (15 tests) +**Tests:** `tests/test_spectral_codebook.py` (43 tests) Implements the "Next Steps" of `docs/SPECTRAL_CODEBOOK_ANALYSIS.md`: a gap-aware spectral codebook over the 250 8×8 integer braid adjacency @@ -16,6 +16,7 @@ encode/decode round trip and an exact, float-free fingerprint per matrix. python3 python/spectral_codebook.py # build + report + write JSON python3 python/spectral_codebook.py --check-manifold # also run the 278-row corpus python3 python/spectral_codebook.py --gap-factor 3 --min-support 10 --no-write +python3 python/spectral_codebook.py --cartan-floor # + Fisher/Δ=17/1792 floor report python3 tests/test_spectral_codebook.py # or python3 -m pytest tests/test_spectral_codebook.py ``` @@ -122,6 +123,73 @@ matrices, no id lacks a matrix). Rerunning gap quantization on the 278-row corpus reproduces the 250-matrix boundaries exactly: **no new gaps, no new clusters, all extra rows fall inside existing clusters.** +## Φ-corkscrew and Cartan layers (f/Cartan integration batch) + +Four layers added on top of the fingerprints, each labelled **exact** +(integer arithmetic, Lean-provable) or **decorative** (placement/reporting +only, carries no information): + +### 1. Integer spiral-index packing — EXACT + +`pack_spiral_index` / `unpack_spiral_index` with corpus-wide parameters +recorded in the JSON header (`phi_corkscrew.packing`): offset = max|c| over +all fingerprint coefficients (164 234 on this corpus), base = 2·offset + 1 +(328 469). Digits are offset-encoded (`c + offset ∈ [0, base)`), so +`spiral_index = Σ (cᵢ + offset)·baseⁱ` is the base-B positional numeral of +the fingerprint — injective on fingerprints by uniqueness of positional +representation, inverted exactly by `unpack_spiral_index`, and verified by +round trip over all 250 matrices in the test suite. It inherits charpoly's +non-injectivity on *matrices* (cospectral classes share one index), so +identity still requires the within-cluster index. + +This **supersedes** the float phinary packing that `integration_sprint.py` +used historically (`phinary += c·φ⁻ⁱ` then truncation — not injective). +The integer path in `integration_sprint.phi_corkscrew_index` is fixed the +same way (offset-encoded digits; its unoffset signed packing collapsed +e.g. `(-1, 1)` with `(1, 0)` in base 2), but its base is per-call — for +corpus-comparable indices use the codebook's recorded (base, offset). + +### 2. f(n) layout — DECORATIVE + +`f(n) = (√n·cos(nψ), √n·sin(nψ))`, ψ = 2π/φ². Injective because 1/φ² is +irrational; low-discrepancy by the three-distance theorem; +information-neutral (everything decodes from `spiral_index` alone). Each +entry stores `layout.radius_sq` (= the spiral index, exact int) and +`layout.angle_frac` (fraction of a full turn). Angles are computed in +`decimal` arithmetic at full precision because spiral indices reach +~10⁴⁴ ≫ 2⁵², where float64 retains no fractional bits of n/φ². Verified +against `VERIFICATION_LOG.md` V007: f(20121) = (−137.80079576, +−33.64432624). Measured minimum pairwise angular separation across the +corpus: ≈ 4.64 × 10⁻⁶ of a turn (positive, as irrationality requires). + +### 3. Cartan ∆-floor quantization (`--cartan-floor`) — EXACT ∆, reported floor + +∆ = **17/1792** exactly (λ_min of the Cartan crossing blocks, +`CartanConnection.lean:70`, `docs/cartan_fingerprint.md`), adopted as the +resolution floor on the Fisher metric of Δ₇: +`d_F(p, q) = 2·arccos(Σ√(pᵢqᵢ))` with `pᵢ = |cᵢ|/Σ|cⱼ|` (all-zero +fingerprint → uniform, by convention). Measured on this corpus: **13 +fingerprint pairs fall below ∆**, merging 196 fingerprints into **187 +∆-resolution codewords**, vs **9 clusters** from the 3×-median-gap λ rule. +Both rules are emitted side by side; neither replaces the other. + +Caveat, asserted in the tests: the simplex projection destroys sign and +scale, so distinct fingerprints can collide on Δ₇ (this corpus has a pair +at Fisher distance exactly 0). The Fisher/∆ layer is a **similarity** +metric, not an identity key. + +### 4. Torus-winding saturation fix — EXACT + +`pist_braid_bridge.TorusWinding` now carries `a_exact`/`b_exact` (plain ℤ, +no clamp) alongside the legacy Q16.16 raws, which silently saturate above +32767 (i.e. for spiral_index > 65535 — and codebook indices reach ~10⁴⁴). +`torus_to_spiral_index` prefers the exact fields, making the round trip +lossless for every index (regression-tested at n = 10⁹); legacy windings +without exact fields keep the old Q16 behaviour. The matching Lean type in +`BraidEigensolid.lean` needs the same widening (Int fields alongside +Q16_16) before this layer can be mirrored formally — noted in the +dataclass docstring, Lean file intentionally untouched. + ## Notes for the Lean side - **Identity layer vs. similarity layer.** `ClassifyN.hashMatrix` is a @@ -222,11 +290,16 @@ equation provenance; this sync does not (and cannot) connect to it. ## Output schema (`data/spectral_codebook.json`) -- header: `schema` (`spectral_codebook_v2`), `quantization` (factor, - min support, median gap, kept/candidate/suppressed boundaries, - sparse-tail cutoff), `clusters` (table above), `collisions` (all counts - and explicit collision classes), `manifold_278` (when `--check-manifold`). +- header: `schema` (`spectral_codebook_v2`), `phi_corkscrew` (packing + base/offset + layout semantics and measured min angular separation), + `quantization` (factor, min support, median gap, + kept/candidate/suppressed boundaries, sparse-tail cutoff), `clusters` + (table above), `collisions` (all counts and explicit collision classes), + `manifold_278` (when `--check-manifold`), `cartan_floor` (when + `--cartan-floor`: sub-Δ Fisher pairs, Δ-resolution codeword count, + rule comparison). - `entries[]`: `equation_id`, `codeword`, `index`, `spectral_radius` (exact), `lambda_power_iteration` (legacy), `charpoly` (8 exact ints), - `density`, `frobenius`, `trace`, optional `sparse_tail`, + `density`, `frobenius`, `trace`, `spiral_index` (exact int packing of + charpoly), `layout` (`radius_sq`, `angle_frac`), optional `sparse_tail`, optional `identical_matrix_ids`. diff --git a/python/charpoly_codebook.py b/python/charpoly_codebook.py index 15a60663..6b4be10a 100644 --- a/python/charpoly_codebook.py +++ b/python/charpoly_codebook.py @@ -6,7 +6,9 @@ polynomial coefficients as the codebook key. Key advantages over power-iteration spectral radius: - Exact (integer coefficients, no float precision issues) -- 192 unique fingerprints vs 180 from spectral radius +- 196 unique fingerprints vs 182 from spectral radius (measured on the + 250-matrix corpus; identical coefficients to the exact Faddeev–LeVerrier + fingerprints in spectral_codebook.py on all 250 matrices) - Cayley-Hamilton verifiable in ℤ (fits integer-only doctrine) - Guaranteed L∞ minimum distance of 1 between distinct codewords diff --git a/python/integration_sprint.py b/python/integration_sprint.py index 151fc45e..612e1d59 100644 --- a/python/integration_sprint.py +++ b/python/integration_sprint.py @@ -282,13 +282,17 @@ def phi_corkscrew_index(spectral_coeffs: np.ndarray) -> int: # If coefficients are integers (charpoly), use them directly if np.all(coeffs == np.round(coeffs)): - # Integer packing: shift each coefficient into a unique digit position - # Base = max(|coeff|) + 1 to guarantee injectivity + # Offset-encoded positional packing: digit = c + abs_max ∈ [0, base) + # with base = 2·abs_max + 1. Packing signed coefficients without + # the offset is NOT injective: (-1, 1) and (1, 0) both give 1 in + # base 2. base/offset are per-call here; for corpus-comparable + # indices use spectral_codebook.pack_spiral_index with the + # corpus-wide (base, offset) recorded in the codebook JSON. abs_max = int(np.max(np.abs(coeffs))) if len(coeffs) > 0 else 0 - base = max(abs_max + 1, 2) + base = max(2 * abs_max + 1, 2) result = 0 for i, c in enumerate(coeffs): - result += int(c) * (base ** i) + result += (int(c) + abs_max) * (base ** i) return result # Float coefficients: normalize to [0, 1], quantize to 16-bit integers diff --git a/python/pist_braid_bridge.py b/python/pist_braid_bridge.py index 33b1ae4f..dfe90f85 100644 --- a/python/pist_braid_bridge.py +++ b/python/pist_braid_bridge.py @@ -334,9 +334,17 @@ class TorusWinding: Matches: SilverSight.BraidEigensolid.TorusWinding a = spatial winding (latitude cycle) b = phase/torsion winding (longitude cycle) + + The Q16_16 raws are LOSSY above value 32767 (Q16_MAX_RAW clamp); + a_exact/b_exact carry the plain-ℤ winding with no clamp and are the + authoritative values when present. BraidEigensolid.lean's + TorusWinding needs the same widening (Int fields alongside the + Q16_16 raws) before this exact layer can be mirrored formally. """ - a: int # Q16_16 raw - b: int # Q16_16 raw + a: int # Q16_16 raw — saturates for values > 32767 + b: int # Q16_16 raw — saturates for values > 32767 + a_exact: Optional[int] = None # plain ℤ winding, no clamp + b_exact: Optional[int] = None # plain ℤ winding, no clamp def to_float(self) -> Tuple[float, float]: return q16_to_float(self.a), q16_to_float(self.b) @@ -356,8 +364,9 @@ def spiral_to_torus_winding(spiral_index: int) -> TorusWinding: ⚠️ SATURATION WARNING: b_raw uses Q16.16 encoding, which clamps at Q16_MAX_RAW / 65536 ≈ 32767.99. For spiral_index > 65535, the - phase winding b silently saturates. Use torus_winding_safe() for - indices that may exceed this range. + phase winding b silently saturates. The a_exact/b_exact fields carry + the unclamped integers; torus_to_spiral_index prefers them, so the + round trip is exact for every spiral_index. This mirrors: TorusWinding in BraidEigensolid.lean """ @@ -366,7 +375,7 @@ def spiral_to_torus_winding(spiral_index: int) -> TorusWinding: b_val = spiral_index // phi_step a_raw = float_to_q16(float(a_val)) b_raw = float_to_q16(float(b_val)) - return TorusWinding(a=a_raw, b=b_raw) + return TorusWinding(a=a_raw, b=b_raw, a_exact=a_val, b_exact=b_val) def spiral_to_torus_winding_safe(spiral_index: int) -> Tuple[TorusWinding, bool]: @@ -385,18 +394,22 @@ def spiral_to_torus_winding_safe(spiral_index: int) -> Tuple[TorusWinding, bool] saturated = b_val > max_q16_val a_raw = float_to_q16(float(a_val)) b_raw = float_to_q16(float(b_val)) - return TorusWinding(a=a_raw, b=b_raw), saturated + return TorusWinding(a=a_raw, b=b_raw, a_exact=a_val, b_exact=b_val), saturated def torus_to_spiral_index(w: TorusWinding) -> int: """Inverse: recover spiral index from torus winding. - n = φ_step · b + a (in integer approximation) + n = φ_step · b + a - ⚠️ For spiral_index > 65535, this will return a saturated value. - Use spiral_to_torus_winding_safe() to detect this case. + Prefers the exact ℤ fields when present (lossless for all n); + falls back to the Q16.16 raws, which saturate for + spiral_index > 65535 — use spiral_to_torus_winding_safe() to + detect that case on legacy windings without exact fields. """ phi_step = int(round(PHI)) + if w.a_exact is not None and w.b_exact is not None: + return phi_step * w.b_exact + w.a_exact b_int = int(round(q16_to_float(w.b))) a_int = int(round(q16_to_float(w.a))) return phi_step * b_int + a_int diff --git a/python/spectral_codebook.py b/python/spectral_codebook.py index a6916280..9f6054fc 100644 --- a/python/spectral_codebook.py +++ b/python/spectral_codebook.py @@ -257,6 +257,186 @@ def spectral_profile(mat: Sequence[Sequence[int]]) -> dict: } +# ────────────────────────────────────────────────────────────────────── +# Φ-corkscrew: integer spiral-index packing (exact) + f(n) layout +# ────────────────────────────────────────────────────────────────────── +# +# The packing layer is EXACT and provable: with a corpus-wide base +# B = 2·max|c| + 1 and offset o = max|c|, +# every offset digit c_i + o lies in [0, B), so +# n = Σ (c_i + o)·B^i +# is the base-B positional numeral of the digit tuple — injective on +# char-poly fingerprints by uniqueness of positional representation, and +# unpack_spiral_index inverts it exactly. It inherits charpoly's +# NON-injectivity on matrices (cospectral classes share one index). +# +# The layout layer f(n) = (√n·cos(nψ), √n·sin(nψ)), ψ = 2π/φ², is +# DECORATIVE placement only: injective because 1/φ² is irrational +# (distinct n give distinct angles), information-neutral (everything is +# recoverable from n alone), low-discrepancy by the three-distance +# theorem. It carries no information beyond spiral_index. + +def packing_params(fingerprints: Sequence[Sequence[int]]) -> Tuple[int, int]: + """Corpus-wide (base, offset) for spiral-index packing. + + offset = max|c| over every coefficient of every fingerprint; + base = 2·offset + 1, so offset-encoded digits fill [0, base). + """ + offset = max((abs(c) for fp in fingerprints for c in fp), default=0) + return 2 * offset + 1, offset + + +def pack_spiral_index(coeffs: Sequence[int], base: int, offset: int) -> int: + """Little-endian base-B packing of offset-encoded coefficients. + + Exact integer arithmetic; injective for digits in range (raises + otherwise). Replaces the float phinary packing of + integration_sprint.phi_corkscrew_index, which was not injective. + """ + n = 0 + for i, c in enumerate(coeffs): + d = c + offset + if not 0 <= d < base: + raise ValueError( + f"coefficient {c} out of packing range for " + f"base={base}, offset={offset}") + n += d * base ** i + return n + + +def unpack_spiral_index(n: int, base: int, offset: int, + length: int = 8) -> Tuple[int, ...]: + """Exact inverse of pack_spiral_index.""" + if n < 0: + raise ValueError("spiral index must be non-negative") + out: List[int] = [] + for _ in range(length): + n, d = divmod(n, base) + out.append(d - offset) + if n: + raise ValueError("spiral index exceeds length digits in this base") + return tuple(out) + + +# 1/φ² = (3 − √5)/2: the fractional rotation per step of the corkscrew. +def angle_frac(n: int) -> float: + """frac(n/φ²) — the corkscrew angle of index n as a fraction of 2π. + + Computed in decimal arithmetic at a precision that covers the integer + part of n·(3−√5)/2, because float64 loses the fractional part + entirely once n exceeds 2^52 (spiral indices here reach base^8). + """ + from decimal import Decimal, getcontext + getcontext().prec = len(str(abs(n))) + 25 + alpha = (Decimal(3) - Decimal(5).sqrt()) / 2 + return float((Decimal(n) * alpha) % 1) + + +def corkscrew_xy(n: int) -> Tuple[float, float]: + """f(n) = (√n·cos(nψ), √n·sin(nψ)), ψ = 2π/φ². Placement only.""" + theta = 2.0 * math.pi * angle_frac(n) + r = math.sqrt(n) + return r * math.cos(theta), r * math.sin(theta) + + +def min_angular_separation(indices: Sequence[int]) -> Optional[float]: + """Minimum circular distance (as a fraction of a full turn) between + the corkscrew angles of distinct spiral indices.""" + uniq = sorted({angle_frac(n) for n in set(indices)}) + if len(uniq) < 2: + return None + gaps = [uniq[i + 1] - uniq[i] for i in range(len(uniq) - 1)] + gaps.append(1.0 - uniq[-1] + uniq[0]) # wrap-around + return min(gaps) + + +# ────────────────────────────────────────────────────────────────────── +# Cartan ∆-floor quantization (Fisher metric on Δ₇) +# ────────────────────────────────────────────────────────────────────── +# +# ∆ = 17/1792 is the minimum eigenvalue of the Cartan crossing blocks, +# proven exact in formal/.../CartanConnection.lean:70 (see +# docs/cartan_fingerprint.md). It is adopted here as the resolution +# floor on the Fisher metric: two codewords closer than ∆ are treated +# as indistinguishable at operator resolution. This gives a PRINCIPLED +# alternative to the 3×-median-gap heuristic; both are emitted so the +# rules can be compared, neither replaces the other. + +CARTAN_DELTA = Fraction(17, 1792) # exact; CartanConnection.lean:70 + + +def simplex_project(coeffs: Sequence[int]) -> Tuple[float, ...]: + """Project a fingerprint onto Δ₇: p_i = |c_i| / Σ|c_j|. + + Convention: the all-zero fingerprint (nilpotent x⁸ class) maps to + the uniform distribution — flagged in the report, since that choice + is a convention, not a theorem. + """ + total = sum(abs(c) for c in coeffs) + k = len(coeffs) + if total == 0: + return tuple(1.0 / k for _ in range(k)) + return tuple(abs(c) / total for c in coeffs) + + +def fisher_distance(p: Sequence[float], q: Sequence[float]) -> float: + """d_F(p, q) = 2·arccos(Σ√(p_i·q_i)) — Fisher geodesic distance on + the probability simplex (Bhattacharyya angle × 2).""" + bc = sum(math.sqrt(a * b) for a, b in zip(p, q)) + return 2.0 * math.acos(min(1.0, bc)) + + +def cartan_floor_report(profiles: Dict[str, dict]) -> dict: + """All-pairs Fisher distances between distinct fingerprints; pairs + below ∆ = 17/1792 are merged into ∆-resolution components (union- + find), giving the codeword count the Cartan floor supports.""" + fp_rep: Dict[Tuple[int, ...], str] = {} + for eid in sorted(profiles): + fp_rep.setdefault(tuple(profiles[eid]["charpoly"]), eid) + fps = list(fp_rep) + pts = [simplex_project(fp) for fp in fps] + delta = float(CARTAN_DELTA) + + parent = list(range(len(fps))) + + def find(i: int) -> int: + while parent[i] != i: + parent[i] = parent[parent[i]] + i = parent[i] + return i + + sub_delta: List[dict] = [] + min_d, min_pair = None, None + for i in range(len(fps)): + for j in range(i + 1, len(fps)): + d = fisher_distance(pts[i], pts[j]) + if min_d is None or d < min_d: + min_d, min_pair = d, (fp_rep[fps[i]], fp_rep[fps[j]]) + if d < delta: + sub_delta.append({ + "representatives": [fp_rep[fps[i]], fp_rep[fps[j]]], + "fisher_distance": round(d, 8), + }) + ri, rj = find(i), find(j) + if ri != rj: + parent[rj] = ri + components = len({find(i) for i in range(len(fps))}) + return { + "delta_exact": "17/1792", + "delta_source": "CartanConnection.lean:70 (docs/cartan_fingerprint.md)", + "delta_float": delta, + "metric": "Fisher on Δ₇: d_F = 2·arccos(Σ√(p_i·q_i)); " + "p_i = |c_i|/Σ|c_j| (all-zero fingerprint → uniform, " + "by convention)", + "distinct_fingerprints": len(fps), + "pairs_below_delta": len(sub_delta), + "sub_delta_pairs": sub_delta[:50], + "delta_resolution_codewords": components, + "min_fisher_distance": round(min_d, 8) if min_d is not None else None, + "min_fisher_pair": list(min_pair) if min_pair else None, + } + + # ────────────────────────────────────────────────────────────────────── # Gap-aware quantization (deduped, sample-size guarded) # ────────────────────────────────────────────────────────────────────── @@ -350,6 +530,14 @@ class Codebook: eid: spectral_profile(mat) for eid, mat in matrices.items() } + # Φ-corkscrew integer packing (corpus-wide base/offset, exact) + self.pack_base, self.pack_offset = packing_params( + [p["charpoly"] for p in self.profiles.values()]) + self.spiral_indices: Dict[str, int] = { + eid: pack_spiral_index(p["charpoly"], self.pack_base, self.pack_offset) + for eid, p in self.profiles.items() + } + # dedupe byte-identical matrices BEFORE gap analysis self.matrix_groups: Dict[Matrix, List[str]] = {} for eid in sorted(self.profiles): @@ -480,6 +668,7 @@ class Codebook: for eid in sorted(self.profiles): cw, idx = self._assign[eid] p = self.profiles[eid] + n = self.spiral_indices[eid] entry = { "equation_id": eid, "codeword": cw, @@ -490,6 +679,11 @@ class Codebook: "density": p["density"], "frobenius": p["frobenius"], "trace": p["trace"], + "spiral_index": n, + "layout": { + "radius_sq": n, + "angle_frac": round(angle_frac(n), 12), + }, } if self.is_sparse_tail(p["spectral_radius"]): entry["sparse_tail"] = True @@ -507,6 +701,33 @@ class Codebook: "characteristic polynomial (charpoly); lambda_power_iteration is " "the legacy estimate and is unreliable on peripheral spectra" ), + "phi_corkscrew": { + "packing": { + "base": self.pack_base, + "offset": self.pack_offset, + "digits": 8, + "order": "little-endian: charpoly c1 is digit 0", + "semantics": ( + "spiral_index = Σ (c_i + offset)·base^i — exact " + "integer, injective on charpoly fingerprints " + "(unpack_spiral_index inverts it exactly); inherits " + "charpoly's non-injectivity on matrices, so identity " + "still needs the within-cluster index" + ), + }, + "layout": { + "psi": "2π/φ² (golden angle)", + "angle_frac": "frac(n·(3−√5)/2), decimal-exact precision", + "min_angular_separation_frac": ( + min_angular_separation(list(self.spiral_indices.values())) + ), + "semantics": ( + "decorative placement only: f(n) is injective because " + "1/φ² is irrational, and carries no information beyond " + "spiral_index" + ), + }, + }, "quantization": { "method": "gap_aware_deduped_min_support", "gap_factor": self.gap_factor, @@ -584,6 +805,9 @@ def main(argv: Optional[List[str]] = None) -> int: help="Minimum distinct matrices per cluster (default 10)") ap.add_argument("--check-manifold", action="store_true", help="Also run over the 278-row RRC/Q16_16Manifold corpus") + ap.add_argument("--cartan-floor", action="store_true", + help="Also emit the Cartan ∆=17/1792 Fisher-floor report " + "(alongside, not replacing, the gap rule)") ap.add_argument("--no-write", action="store_true", help="Report only; do not write the JSON") ap.add_argument("--sync-db", action="store_true", @@ -638,6 +862,21 @@ def main(argv: Optional[List[str]] = None) -> int: print(f" boundaries match 250-matrix codebook: {mc['boundaries_match_250']} " f"({mc['clusters']} clusters)") + if args.cartan_floor: + cf = cartan_floor_report(cb.profiles) + doc["cartan_floor"] = cf + gap_clusters = len(q["boundaries"]) + 1 + print(f"\n Cartan ∆-floor (∆ = {cf['delta_exact']} ≈ " + f"{cf['delta_float']:.6f}, {cf['delta_source']}):") + print(f" distinct fingerprints on Δ₇ : {cf['distinct_fingerprints']}") + print(f" pairs below ∆ (Fisher) : {cf['pairs_below_delta']}") + print(f" min Fisher distance : {cf['min_fisher_distance']} " + f"{cf['min_fisher_pair']}") + print(f" rule comparison — codewords : " + f"∆-floor {cf['delta_resolution_codewords']} vs " + f"3×-median-gap {gap_clusters} (λ clusters); both emitted, " + f"neither replaces the other") + if args.sync_db: import spectral_codebook_db print("\n DB sync (dry run):") diff --git a/tests/test_spectral_codebook.py b/tests/test_spectral_codebook.py index 67fb1b67..c7da47dc 100644 --- a/tests/test_spectral_codebook.py +++ b/tests/test_spectral_codebook.py @@ -320,5 +320,189 @@ class TestSpectralCodebookDbSync(unittest.TestCase): os.environ["NEON_PG"] = old +class TestPhiCorkscrewPacking(unittest.TestCase): + """STEP 1: integer spiral-index packing — exact, injective, reversible.""" + + @classmethod + def setUpClass(cls): + cls.matrices = sc.parse_matrices_lean() + cls.codebook = sc.Codebook(cls.matrices) + + def test_base_is_odd_and_covers_corpus(self): + base, offset = self.codebook.pack_base, self.codebook.pack_offset + self.assertEqual(base, 2 * offset + 1) + for p in self.codebook.profiles.values(): + for c in p["charpoly"]: + self.assertLessEqual(abs(c), offset) + + def test_round_trip_all_250(self): + base, offset = self.codebook.pack_base, self.codebook.pack_offset + for eid, p in self.codebook.profiles.items(): + fp = tuple(p["charpoly"]) + n = self.codebook.spiral_indices[eid] + self.assertEqual(sc.unpack_spiral_index(n, base, offset, 8), fp, eid) + + def test_injective_on_fingerprints(self): + by_fp = {} + for eid, p in self.codebook.profiles.items(): + by_fp.setdefault(tuple(p["charpoly"]), set()).add( + self.codebook.spiral_indices[eid]) + # one index per fingerprint … + for fp, idxs in by_fp.items(): + self.assertEqual(len(idxs), 1, fp) + # … and distinct fingerprints get distinct indices + all_idx = [next(iter(v)) for v in by_fp.values()] + self.assertEqual(len(set(all_idx)), len(by_fp)) + + def test_signed_collision_regression(self): + # The unoffset packing collapsed (-1, 1) and (1, 0); ours must not. + base, offset = sc.packing_params([(-1, 1), (1, 0)]) + a = sc.pack_spiral_index((-1, 1), base, offset) + b = sc.pack_spiral_index((1, 0), base, offset) + self.assertNotEqual(a, b) + + def test_out_of_range_raises(self): + with self.assertRaises(ValueError): + sc.pack_spiral_index((5,), base=3, offset=1) + + def test_integration_sprint_integer_path_fixed(self): + import numpy as np + import integration_sprint as isp + # same shape, same abs_max (=1) → same per-call base/offset, so the + # historical base-2 collision pair must now pack to distinct indices + a = isp.phi_corkscrew_index(np.array([-1.0, 1.0, 0.0])) + b = isp.phi_corkscrew_index(np.array([1.0, 0.0, -1.0])) + self.assertNotEqual(a, b) + + +class TestCorkscrewLayout(unittest.TestCase): + """STEP 2: f(n) layout — decorative placement, verified against V007.""" + + @classmethod + def setUpClass(cls): + cls.matrices = sc.parse_matrices_lean() + cls.codebook = sc.Codebook(cls.matrices) + + def test_v007_reference_point(self): + # VERIFICATION_LOG.md V007: f(20121) = (-137.80079576, -33.64432624) + x, y = sc.corkscrew_xy(20121) + self.assertAlmostEqual(x, -137.80079576, places=5) + self.assertAlmostEqual(y, -33.64432624, places=5) + + def test_angle_frac_in_unit_interval(self): + for eid, n in self.codebook.spiral_indices.items(): + f = sc.angle_frac(n) + self.assertGreaterEqual(f, 0.0, eid) + self.assertLess(f, 1.0, eid) + + def test_angle_frac_exceeds_float64_naive(self): + # for n >> 2^52 the float product n·α has no fractional bits left; + # the decimal path must still give a nontrivial fraction + n = 10 ** 40 + 7 + f = sc.angle_frac(n) + self.assertGreaterEqual(f, 0.0) + self.assertLess(f, 1.0) + # consecutive indices step by frac(α): distinguishable at any scale + g = sc.angle_frac(n + 1) + alpha_frac = 0.3819660112501051 # frac((3−√5)/2) + diff = (g - f) % 1.0 + self.assertAlmostEqual(diff, alpha_frac, places=9) + + def test_layout_in_json_and_information_neutral(self): + doc = self.codebook.to_json() + pc = doc["phi_corkscrew"] + self.assertEqual(pc["packing"]["base"], self.codebook.pack_base) + sep = pc["layout"]["min_angular_separation_frac"] + self.assertIsNotNone(sep) + self.assertGreater(sep, 0.0) + for entry in doc["entries"]: + # radius² IS the spiral index — layout adds no information + self.assertEqual(entry["layout"]["radius_sq"], entry["spiral_index"]) + + +class TestCartanFloor(unittest.TestCase): + """STEP 3: Cartan ∆ = 17/1792 as Fisher-distance resolution floor.""" + + @classmethod + def setUpClass(cls): + cls.matrices = sc.parse_matrices_lean() + cls.codebook = sc.Codebook(cls.matrices) + cls.report = sc.cartan_floor_report(cls.codebook.profiles) + + def test_delta_exact_value(self): + from fractions import Fraction + self.assertEqual(sc.CARTAN_DELTA, Fraction(17, 1792)) + + def test_fisher_metric_axioms(self): + p = sc.simplex_project((1, -2, 3, 0, 0, 0, 0, 4)) + q = sc.simplex_project((0, 5, 0, 1, 0, 0, 0, 0)) + self.assertAlmostEqual(sc.fisher_distance(p, p), 0.0, places=12) + self.assertAlmostEqual(sc.fisher_distance(p, q), + sc.fisher_distance(q, p), places=12) + # disjoint support → maximal distance π + u = sc.simplex_project((1, 0, 0, 0, 0, 0, 0, 0)) + v = sc.simplex_project((0, 1, 0, 0, 0, 0, 0, 0)) + import math + self.assertAlmostEqual(sc.fisher_distance(u, v), math.pi, places=12) + + def test_simplex_projection_sums_to_one(self): + for p in self.codebook.profiles.values(): + pt = sc.simplex_project(p["charpoly"]) + self.assertAlmostEqual(sum(pt), 1.0, places=12) + + def test_zero_fingerprint_convention(self): + pt = sc.simplex_project((0,) * 8) + self.assertEqual(pt, tuple(1.0 / 8 for _ in range(8))) + + def test_report_consistency(self): + r = self.report + self.assertEqual(r["distinct_fingerprints"], 196) + # merging k sub-∆ pairs can remove at most k components + self.assertGreaterEqual( + r["delta_resolution_codewords"], + r["distinct_fingerprints"] - r["pairs_below_delta"]) + self.assertLessEqual(r["delta_resolution_codewords"], + r["distinct_fingerprints"]) + + def test_simplex_projection_is_lossy(self): + # |c|/Σ|c| destroys sign+scale: distinct fingerprints can collide on + # Δ₇ (min Fisher distance 0.0 in this corpus) — similarity layer, + # NOT an identity key. This is asserted so the doc claim stays true. + self.assertEqual(self.report["min_fisher_distance"], 0.0) + + +class TestTorusWindingExact(unittest.TestCase): + """STEP 4: torus-winding round trip must not saturate at n ≥ 65536.""" + + @classmethod + def setUpClass(cls): + import pist_braid_bridge as pbb + cls.pbb = pbb + + def test_round_trip_regression_1e9(self): + pbb = self.pbb + for n in (0, 1, 65535, 65536, 10 ** 9): + w = pbb.spiral_to_torus_winding(n) + self.assertEqual(pbb.torus_to_spiral_index(w), n, n) + + def test_exact_fields_populated(self): + pbb = self.pbb + w = pbb.spiral_to_torus_winding(10 ** 9) + self.assertEqual(w.a_exact, 10 ** 9 % 2) + self.assertEqual(w.b_exact, 10 ** 9 // 2) + + def test_q16_raws_still_saturate_and_are_flagged(self): + pbb = self.pbb + w, saturated = pbb.spiral_to_torus_winding_safe(10 ** 9) + self.assertTrue(saturated) + self.assertEqual(w.b, pbb.Q16_MAX_RAW) # legacy raw clamps… + self.assertEqual(pbb.torus_to_spiral_index(w), 10 ** 9) # …exact wins + + def test_legacy_winding_without_exact_fields(self): + pbb = self.pbb + w = pbb.TorusWinding(a=pbb.float_to_q16(1.0), b=pbb.float_to_q16(21.0)) + self.assertEqual(pbb.torus_to_spiral_index(w), 43) + + if __name__ == "__main__": unittest.main()