{"item":"numba-rng","batch":"e05-fast-sim","credit":"Replica (replica2.py), Gaussian filter, fee rule and qm tables by Taylor (gtmcknight), github.com/gtmcknight/amm-sim @4812a6382311624e1506aca131ca35c378f930d9 research/solved. QMRef/TwoComp/COMBO/HEAD8 are IdentityMD items built on them. This item: Numba port only; no training, no contracts, no engine, no policy tuning.","verdicts":{"gate_P":"PASS: unmodified python3 -I gates.py at the verified commit printed all 12 README values to 6dp (stdout below)","parity_baseline":"PASS: 384/384 rows (qmref,twocomp,combo x seeds 10000..10063 and 64000..64063), max |edge err| 1.19e-11 <= 1e-6","parity_head8_hook":"PASS: 128/128 rows with the supplied rounded HEAD8 vector, max |edge err| 1.53e-11 <= 1e-6 (the hook test is NOT a policy claim)","zero_head":"PASS: zero head vs CPython Head(zero) max err 1.19e-11 on 128 seeds; zero head vs accelerated Combo max diff 0 (bit-identical if 0)","hidden_input_invariance":"PASS (see invariance)","speed_target_50_runs_per_core":"NOT MET in absolute terms on this machine: best 12.4 runs/s (combo, warm, single thread, end-to-end incl. RNG, market and policy callbacks); this machine runs CPython ~30x slower than a normal host (906 ns per empty loop iteration), so the absolute figure is not representative. Same-machine speedup over CPython: see per_policy. An extrapolation to a normal host (~0.2-0.3 s/run CPython, as published by the COMBO item) would be >50/s but was NOT measured.","stop_promotion":"not triggered: no parity failure in the final kernel"},"divergences_found_and_fixed_during_development":["First HEAD8 parity run: seed 10039 abs err 4.05e-4 (95 other rows ~1e-11). First divergence at callback 11 (t=8): fee ask 1.7227144438879968e-06 (CPython) vs 1.7227144438880103e-06: cause CPython>=3.12 builtin sum() of floats is Neumaier-compensated; head.py sums 8 hidden terms with sum(); kernel now uses the same compensated sum (nsum8).","Next first divergence at callback 8481 (t=7552): CPython fee 0.1 vs kernel 0.09999022635836659: head.py adds the correction to the UNCLAMPED base fee (correct(...fb, fa) gets the local pre-clamp values); kernel fixed to do the same. After both fixes seed 10039 has no per-callback diff over all 11211 callbacks and all 256 head rows pass."],"hashes":{"source_commit":"4812a6382311624e1506aca131ca35c378f930d9 (git rev-parse HEAD after checkout)","artifacts_sha256_equals_url_suffix":{"qt1":"8a6e303b662e1a5ea9bb47f31acedd3988ef65b3ddb66d074517aa59ad41ca40","TC":"d3c849db2ac31e567b57e52b80b86e8c24c842e5b4125b9d75c78e3cb07115b9","COMBO":"d360bea6c8c982717b7b43a8069a87013169c89ee3e4da25622db4d880b936d4","QMS1":"17d249ab0c33fc44931d9b105cf3f9e3846a560bd518b67310c2a56defacdecc","HEAD8":"a2d5a0dea7982a84bd2238f143f045b44600c35ac5638d2307fdeadc15bfc757"},"extracted_sha256":{"qmref.py":"1dfc9b7a3c2237ff7a93dd9f0af54b9bdab16f2ce0a7eb00784cb4432598db92","twocomp.py":"9d3c1833321493fb51bbde4e1b4dabc2f8978bd6d774ee2af8dc8aed13f0f0af","combo.py":"c5b711a0b4fb4783e8879a484bf87a427171f4a11aa5eb5ec3513c24ead1a796","blob.bin":"3ac7cb8811ecfb6a17f499aa4e9b70dd55f7fb6432b3aec3b904e11a3dece38e","head.py":"59c01d85aff6c712b65bf84f98068c6088e7aca47ce12b7b23ef7255292396c3","drive.py(HEAD8, unused)":"1c30173a4fa6a2fa0a08eb8999d988bd941e55c903f10f78051024eaacc9e2a2","replica2.py":"6e37b4e61e1ffa5ffb1e43912ddb8659105989aa986eb48fcd1d7608f8dca685"},"all_match_published":true,"fastsim_py_sha256":"4d3d2187b5dcbcd979a0775e431d30421b0e376d3c582afc60fbb4d6a052596b","driver_py_sha256":"8ae4aa097e03794872bbda37b8c024365b33bab45131e14e3a9f0c05c1bd4913"},"gate_P_stdout":"seed   perfect-info      gaussian+plain    gaussian+qm       lattice+qm\n10000  448.261189  443.455598  443.522608  443.663520\n10001  576.779199  571.463409  571.623551  571.977293\n10002  531.886497  525.168028  525.865859  526.411631\n\nreal\t0m52.912s\nuser\t0m51.410s\nsys\t0m0.293s\n","parity":{"tolerance":1e-06,"per_policy":{"qmref":{"n":128,"max_abs_err":9.663381206337363e-12,"max_abs_err_10000_10063":9.663381206337363e-12,"max_abs_err_64000_64063":8.981260180007666e-12,"cpython_s_per_run_median_8_parallel_workers":11.70148178585805,"numba_s_per_run_median":0.06284159701317549,"speedup_vs_cpython_same_machine":186.2059900133457},"twocomp":{"n":128,"max_abs_err":1.000444171950221e-11,"max_abs_err_10000_10063":1.8189894035458565e-12,"max_abs_err_64000_64063":1.000444171950221e-11,"cpython_s_per_run_median_8_parallel_workers":16.099760730052367,"numba_s_per_run_median":0.07450192351825535,"speedup_vs_cpython_same_machine":216.09859141566204},"combo":{"n":128,"max_abs_err":1.1937117960769683e-11,"max_abs_err_10000_10063":5.4569682106375694e-12,"max_abs_err_64000_64063":1.1937117960769683e-11,"cpython_s_per_run_median_8_parallel_workers":19.096725174458697,"numba_s_per_run_median":0.08679270651191473,"speedup_vs_cpython_same_machine":220.0268425992354},"head8":{"n":128,"max_abs_err":1.5347723092418164e-11,"cpython_s_per_run_median":33.24268694547936,"numba_s_per_run_median":0.1299358339747414}},"columns":"[seed, CPython edge (6dp), |CPython - Numba| edge error]; the Numba edge equals CPython edge +- that error","baseline_rows":{"qmref":[[10000,443.101741,0.0],[10001,571.454483,0.0],[10002,525.908441,1.4e-12],[10003,574.040699,9.1e-13],[10004,523.245286,0.0],[10005,526.886083,0.0],[10006,485.471113,0.0],[10007,526.499854,0.0],[10008,662.120344,0.0],[10009,652.215433,0.0],[10010,476.458262,0.0],[10011,370.779112,0.0],[10012,458.676508,0.0],[10013,402.044717,0.0],[10014,699.939333,0.0],[10015,630.00744,0.0],[10016,566.883377,0.0],[10017,493.663184,0.0],[10018,481.294922,0.0],[10019,455.026496,0.0],[10020,494.936996,0.0],[10021,413.14477,0.0],[10022,439.795916,9.7e-12],[10023,635.556903,0.0],[10024,480.645031,0.0],[10025,446.092918,0.0],[10026,346.418333,0.0],[10027,548.294917,0.0],[10028,525.13246,4.8e-12],[10029,442.213958,0.0],[10030,594.705251,0.0],[10031,342.135371,4.5e-12],[10032,638.215547,6.8e-13],[10033,535.889902,0.0],[10034,563.480957,3.4e-12],[10035,630.879107,0.0],[10036,546.599922,0.0],[10037,444.48181,5.3e-12],[10038,619.144826,0.0],[10039,588.640685,0.0],[10040,609.932131,0.0],[10041,629.442648,0.0],[10042,710.943099,0.0],[10043,639.584665,0.0],[10044,420.549954,0.0],[10045,386.200606,0.0],[10046,431.914837,4e-12],[10047,597.670416,0.0],[10048,498.509602,0.0],[10049,383.887352,0.0],[10050,374.420306,0.0],[10051,422.856273,0.0],[10052,429.482366,3e-12],[10053,537.944577,9.1e-13],[10054,446.855281,0.0],[10055,709.953769,0.0],[10056,582.98274,0.0],[10057,510.91066,0.0],[10058,438.308899,0.0],[10059,507.623204,0.0],[10060,927.605559,0.0],[10061,561.747127,5e-12],[10062,608.03992,0.0],[10063,429.739935,0.0],[64000,436.408765,0.0],[64001,475.01967,9.1e-13],[64002,434.703199,3e-12],[64003,572.661568,0.0],[64004,385.956169,0.0],[64005,586.20092,0.0],[64006,670.252322,0.0],[64007,607.097068,0.0],[64008,626.38773,0.0],[64009,474.202735,2.3e-12],[64010,468.850364,0.0],[64011,529.686513,0.0],[64012,427.398415,0.0],[64013,427.100709,0.0],[64014,564.067448,1.6e-12],[64015,404.210132,0.0],[64016,535.156962,0.0],[64017,610.641824,0.0],[64018,489.388196,0.0],[64019,716.635606,0.0],[64020,457.281421,0.0],[64021,583.889705,0.0],[64022,564.542987,0.0],[64023,461.866294,0.0],[64024,609.235777,0.0],[64025,604.319032,0.0],[64026,448.634555,0.0],[64027,505.714435,2.6e-12],[64028,488.099411,0.0],[64029,357.815281,0.0],[64030,567.581581,0.0],[64031,624.29505,0.0],[64032,441.045803,9e-12],[64033,592.851045,0.0],[64034,651.089806,2.5e-12],[64035,512.209682,0.0],[64036,477.004911,0.0],[64037,402.034745,0.0],[64038,536.302899,0.0],[64039,554.948047,0.0],[64040,465.406324,0.0],[64041,527.836759,0.0],[64042,401.480827,0.0],[64043,582.364153,0.0],[64044,712.437144,0.0],[64045,655.866445,0.0],[64046,490.34439,8e-13],[64047,493.711907,0.0],[64048,612.187388,0.0],[64049,484.893939,0.0],[64050,432.332596,0.0],[64051,523.040498,6.6e-12],[64052,547.159138,0.0],[64053,502.750916,0.0],[64054,484.783094,0.0],[64055,581.695076,0.0],[64056,590.217539,0.0],[64057,424.050519,0.0],[64058,479.919728,0.0],[64059,394.628244,0.0],[64060,497.257421,0.0],[64061,597.665752,0.0],[64062,631.035047,0.0],[64063,543.399505,9.1e-13]],"twocomp":[[10000,443.690614,0.0],[10001,571.968071,0.0],[10002,526.124475,0.0],[10003,573.91946,0.0],[10004,523.477153,0.0],[10005,527.376672,0.0],[10006,486.070303,0.0],[10007,526.104291,0.0],[10008,663.237126,0.0],[10009,653.924123,0.0],[10010,476.925031,0.0],[10011,370.541945,0.0],[10012,459.102164,0.0],[10013,402.354595,0.0],[10014,701.118483,0.0],[10015,630.174678,0.0],[10016,567.482623,0.0],[10017,494.322439,0.0],[10018,482.627766,0.0],[10019,455.055191,0.0],[10020,496.032929,0.0],[10021,412.673294,0.0],[10022,440.504508,0.0],[10023,635.528871,0.0],[10024,481.617902,0.0],[10025,446.820344,0.0],[10026,346.743311,0.0],[10027,548.382022,0.0],[10028,525.70055,0.0],[10029,442.998387,0.0],[10030,594.476642,1.8e-12],[10031,342.378779,0.0],[10032,639.310906,0.0],[10033,536.090352,0.0],[10034,563.698346,0.0],[10035,634.255637,0.0],[10036,547.086717,0.0],[10037,445.487632,0.0],[10038,619.332392,0.0],[10039,589.304323,0.0],[10040,610.671487,0.0],[10041,631.102064,0.0],[10042,711.536518,0.0],[10043,638.801013,0.0],[10044,421.867391,0.0],[10045,387.328506,0.0],[10046,431.746896,0.0],[10047,599.022832,0.0],[10048,498.297891,0.0],[10049,384.47583,0.0],[10050,374.793883,0.0],[10051,423.640747,0.0],[10052,430.330473,0.0],[10053,537.267001,0.0],[10054,447.897763,0.0],[10055,710.234002,0.0],[10056,583.234203,0.0],[10057,510.590997,0.0],[10058,439.001369,0.0],[10059,507.417364,0.0],[10060,927.937616,9.1e-13],[10061,562.769137,0.0],[10062,609.223015,0.0],[10063,430.250395,0.0],[64000,437.157092,2.8e-12],[64001,475.763433,0.0],[64002,435.32078,0.0],[64003,574.777119,0.0],[64004,386.729738,2.6e-12],[64005,586.689031,0.0],[64006,670.784244,0.0],[64007,607.046458,0.0],[64008,627.103848,0.0],[64009,474.38676,0.0],[64010,469.310477,0.0],[64011,529.379785,0.0],[64012,427.153138,8e-13],[64013,427.43857,0.0],[64014,564.856819,0.0],[64015,404.486287,0.0],[64016,535.523793,0.0],[64017,610.822693,0.0],[64018,490.25155,0.0],[64019,717.211562,0.0],[64020,457.255856,0.0],[64021,583.673147,0.0],[64022,564.7825,0.0],[64023,463.149873,0.0],[64024,608.681522,0.0],[64025,605.343352,2.5e-12],[64026,449.192256,0.0],[64027,505.984487,0.0],[64028,488.852505,0.0],[64029,358.077772,0.0],[64030,568.84291,0.0],[64031,625.920807,9.1e-13],[64032,441.651217,3.1e-12],[64033,593.664311,0.0],[64034,652.187258,0.0],[64035,513.08221,0.0],[64036,477.391985,0.0],[64037,402.905862,0.0],[64038,536.569195,1e-11],[64039,556.310389,0.0],[64040,466.291105,0.0],[64041,528.0409,0.0],[64042,401.609232,0.0],[64043,582.223966,0.0],[64044,713.510426,0.0],[64045,655.549541,0.0],[64046,490.976802,0.0],[64047,494.106904,0.0],[64048,612.988323,0.0],[64049,485.398566,0.0],[64050,432.513205,0.0],[64051,522.856405,0.0],[64052,547.668549,0.0],[64053,502.437487,0.0],[64054,485.500185,0.0],[64055,582.653611,0.0],[64056,591.071221,0.0],[64057,424.27793,0.0],[64058,479.629054,0.0],[64059,395.029651,0.0],[64060,497.482637,0.0],[64061,598.186438,0.0],[64062,632.096475,0.0],[64063,543.509019,0.0]],"combo":[[10000,444.19533,0.0],[10001,572.172682,0.0],[10002,526.27476,0.0],[10003,573.811097,0.0],[10004,523.593941,0.0],[10005,527.614292,0.0],[10006,486.153342,0.0],[10007,525.620715,0.0],[10008,662.565553,0.0],[10009,654.037421,0.0],[10010,477.72275,0.0],[10011,371.062413,0.0],[10012,458.946697,0.0],[10013,402.003342,0.0],[10014,701.61875,4.5e-13],[10015,630.817181,0.0],[10016,568.405849,0.0],[10017,494.449446,0.0],[10018,482.259962,0.0],[10019,454.968163,0.0],[10020,495.582983,5.7e-13],[10021,413.225285,0.0],[10022,441.431232,0.0],[10023,635.586975,0.0],[10024,481.625728,0.0],[10025,446.719757,2.8e-12],[10026,346.987414,0.0],[10027,548.415337,0.0],[10028,525.450918,0.0],[10029,443.455469,0.0],[10030,593.971971,2.7e-12],[10031,342.59518,0.0],[10032,638.988041,0.0],[10033,536.198071,0.0],[10034,563.862891,0.0],[10035,634.643044,0.0],[10036,547.16404,5.5e-12],[10037,445.440428,0.0],[10038,619.98787,0.0],[10039,589.103862,0.0],[10040,610.613943,0.0],[10041,631.171422,0.0],[10042,711.515745,0.0],[10043,639.50702,0.0],[10044,421.683379,0.0],[10045,387.146918,0.0],[10046,432.231816,0.0],[10047,599.377388,0.0],[10048,498.706602,0.0],[10049,384.359827,0.0],[10050,374.934185,0.0],[10051,423.62458,0.0],[10052,430.044776,0.0],[10053,537.576293,0.0],[10054,447.789568,0.0],[10055,710.458483,0.0],[10056,583.608766,0.0],[10057,510.69931,0.0],[10058,439.635703,2.4e-12],[10059,508.193779,0.0],[10060,928.13819,0.0],[10061,562.911775,0.0],[10062,609.057353,0.0],[10063,430.625278,0.0],[64000,437.71,0.0],[64001,475.681302,0.0],[64002,434.753759,0.0],[64003,575.219527,0.0],[64004,387.357067,0.0],[64005,586.198603,0.0],[64006,670.858067,0.0],[64007,607.149556,0.0],[64008,627.109208,0.0],[64009,474.470313,0.0],[64010,470.121732,0.0],[64011,529.516232,0.0],[64012,428.493973,0.0],[64013,427.035477,0.0],[64014,564.565841,0.0],[64015,404.574857,0.0],[64016,535.970075,4.3e-12],[64017,610.947428,0.0],[64018,489.889565,0.0],[64019,716.341619,0.0],[64020,457.3488,0.0],[64021,583.68387,0.0],[64022,564.254664,0.0],[64023,463.432732,0.0],[64024,610.360803,0.0],[64025,605.060173,0.0],[64026,449.595345,1.2e-11],[64027,506.959799,0.0],[64028,488.752737,0.0],[64029,357.826707,0.0],[64030,568.793731,0.0],[64031,625.952922,0.0],[64032,441.416649,0.0],[64033,594.047892,0.0],[64034,652.606207,0.0],[64035,513.071829,0.0],[64036,477.954709,0.0],[64037,403.284884,0.0],[64038,536.466948,0.0],[64039,555.559317,9.1e-13],[64040,466.41638,0.0],[64041,528.608416,0.0],[64042,401.905762,0.0],[64043,582.905414,0.0],[64044,714.919169,0.0],[64045,656.46365,0.0],[64046,490.796533,0.0],[64047,495.118695,0.0],[64048,613.333186,0.0],[64049,484.841961,0.0],[64050,432.595555,0.0],[64051,524.145921,0.0],[64052,548.055989,0.0],[64053,502.242186,3.2e-12],[64054,485.07674,0.0],[64055,582.157979,0.0],[64056,591.107757,0.0],[64057,425.256929,0.0],[64058,480.043274,0.0],[64059,395.319367,0.0],[64060,497.70358,0.0],[64061,597.986363,0.0],[64062,632.275145,0.0],[64063,543.418878,0.0]]},"head8_rows":[[10000,443.953864,0.0],[10001,571.957395,0.0],[10002,526.559497,0.0],[10003,573.883173,0.0],[10004,523.163446,0.0],[10005,527.025655,0.0],[10006,486.713145,0.0],[10007,526.892933,0.0],[10008,662.566048,0.0],[10009,654.339298,0.0],[10010,477.719732,0.0],[10011,370.982424,0.0],[10012,458.992114,0.0],[10013,402.212286,0.0],[10014,701.527174,0.0],[10015,631.041929,2.3e-12],[10016,568.573008,0.0],[10017,494.519433,0.0],[10018,482.170554,0.0],[10019,455.522655,6.1e-12],[10020,496.36465,0.0],[10021,413.427524,0.0],[10022,441.159608,0.0],[10023,636.523089,0.0],[10024,482.03316,3.4e-12],[10025,446.60461,0.0],[10026,346.661081,5.5e-12],[10027,548.262853,0.0],[10028,525.579055,4.5e-13],[10029,443.058822,0.0],[10030,594.694868,0.0],[10031,343.104621,0.0],[10032,639.453149,0.0],[10033,536.278419,0.0],[10034,564.404967,0.0],[10035,634.989928,0.0],[10036,547.101992,0.0],[10037,446.02979,0.0],[10038,619.953288,0.0],[10039,590.128617,0.0],[10040,610.649817,0.0],[10041,630.971492,0.0],[10042,711.470606,0.0],[10043,639.789854,1.1e-13],[10044,421.776547,0.0],[10045,387.013142,0.0],[10046,432.492781,1.6e-12],[10047,598.839793,0.0],[10048,498.32632,0.0],[10049,385.070443,0.0],[10050,375.31658,0.0],[10051,423.723942,1.5e-11],[10052,430.058843,0.0],[10053,537.780943,0.0],[10054,447.725999,0.0],[10055,710.970077,0.0],[10056,583.743812,0.0],[10057,510.772577,0.0],[10058,439.595453,0.0],[10059,507.803411,0.0],[10060,928.680393,0.0],[10061,562.852511,0.0],[10062,609.754187,9.1e-13],[10063,431.001525,0.0],[64000,438.070553,0.0],[64001,475.962839,0.0],[64002,435.717741,0.0],[64003,575.438274,0.0],[64004,387.382765,0.0],[64005,585.901765,0.0],[64006,671.378244,0.0],[64007,607.438008,0.0],[64008,627.009583,0.0],[64009,474.703369,0.0],[64010,470.234516,0.0],[64011,529.216216,0.0],[64012,428.23707,0.0],[64013,427.315385,0.0],[64014,564.212556,0.0],[64015,404.775061,0.0],[64016,535.683228,0.0],[64017,611.330098,0.0],[64018,490.719125,0.0],[64019,716.804177,0.0],[64020,457.243292,0.0],[64021,583.088046,0.0],[64022,564.438234,0.0],[64023,463.537429,0.0],[64024,609.348198,0.0],[64025,605.277878,0.0],[64026,449.274012,0.0],[64027,506.587935,0.0],[64028,488.484861,0.0],[64029,357.598445,0.0],[64030,568.98276,0.0],[64031,626.348373,0.0],[64032,441.482424,0.0],[64033,593.625813,0.0],[64034,652.661209,0.0],[64035,512.94723,0.0],[64036,478.086907,0.0],[64037,403.502666,0.0],[64038,536.555432,0.0],[64039,556.207001,0.0],[64040,466.239222,1.1e-11],[64041,528.436314,0.0],[64042,401.818242,0.0],[64043,582.431995,0.0],[64044,714.936303,0.0],[64045,656.427601,0.0],[64046,490.87959,0.0],[64047,495.411975,0.0],[64048,613.420886,0.0],[64049,484.902543,0.0],[64050,433.427268,4.5e-12],[64051,523.545869,0.0],[64052,548.632812,0.0],[64053,502.611618,1.1e-12],[64054,484.81231,0.0],[64055,582.09543,0.0],[64056,590.469573,0.0],[64057,424.785823,0.0],[64058,479.975016,0.0],[64059,394.914061,1.1e-13],[64060,497.861743,0.0],[64061,598.295657,0.0],[64062,632.468267,0.0],[64063,543.893754,0.0]],"zero_head_rows_max_err":1.1937117960769683e-11},"hook_test":{"label":"HEAD8 rounded vector (W_frozen, 9dp) from the supplied artifact, run(seed,\"combo\",W)","W":[-0.026618487,-0.070207473,-0.010260029,-0.039506307,-0.031319086,-0.024026954,-0.010362795,-0.026501258,-0.092376172,0.065727168,-0.0234922,0.048898344,0.025732963,-0.003616139,-0.0396233,-0.007869716,0.004707838,0.044162589],"hook":"run(seed, \"combo\", head_params=18 weights); zero vector == COMBO","components_exposed":"run_log(seed,policy,head_params,tabs) returns one row per callback: 8 head features, fees, ncomp, component1 (w,m,v) = arb point mass (pi, lp, 0) on ambiguous first trades, component2 (w,m,v) = retail truncated Gaussian (1-pi, mt, vt), mixture (m,v), is_buy, t, reserves x,y"},"invariance":{"cpython_scrambled_hidden_args":{"qmref":{"plain":[443.1017411146794,571.454483381923,436.4087645205474],"scrambled":[443.1017411146794,571.454483381923,436.4087645205474],"identical":true},"twocomp":{"plain":[443.69061377502567,571.9680708080158,437.1570917731649],"scrambled":[443.69061377502567,571.9680708080158,437.1570917731649],"identical":true},"combo":{"plain":[444.1953300340616,572.1726816933833,437.7100000860294],"scrambled":[444.1953300340616,572.1726816933833,437.7100000860294],"identical":true},"head8":{"plain":[443.953863740704,438.0705531713008],"scrambled":[443.953863740704,438.0705531713008],"identical":true}},"numba_replay":{"qmref/10000":{"callbacks":9061,"identical":true},"qmref/64000":{"callbacks":9615,"identical":true},"twocomp/10000":{"callbacks":8980,"identical":true},"twocomp/64000":{"callbacks":9579,"identical":true},"combo/10000":{"callbacks":9082,"identical":true},"combo/64000":{"callbacks":9656,"identical":true},"combo+head8/10000":{"callbacks":9082,"identical":true},"combo+head8/64000":{"callbacks":9655,"identical":true}}},"invariance_notes":"CPython references run with scrambled arb flag, p, s2, j and different init(sigma,lam,size): identical edges. Numba policy entry on_trade(...) takes only is_buy, timestamp, reserves (+ its own state/tables); replaying only those logged inputs into a fresh state reproduced every fee exactly on 8 runs. The policy code never reads run parameters.","timings":{"speed":{"jit_cold":{"import_s":1.8271430029999465,"tables_s":0.05982947489246726,"first_run_calls_s":74.58173250290565,"log_replay_first_s":17.65986397420056,"maxrss_mb":235.5703125},"jit_warm":{"import_s":1.7652936060912907,"tables_s":0.0669006328098476,"first_run_calls_s":1.3709387080743909,"log_replay_first_s":0.19934853492304683,"maxrss_mb":152.921875},"runs_per_s_qmref":{"best":16.41231180028403,"all":[15.949471051248421,16.41231180028403,15.99368552323039],"n_runs":60},"runs_per_s_twocomp":{"best":14.403665843838386,"all":[13.166757347109636,13.745633588500281,14.403665843838386],"n_runs":60},"runs_per_s_combo":{"best":12.409302229901455,"all":[12.270882893298488,12.368420217833272,12.409302229901455],"n_runs":60},"runs_per_s_combo+head8":{"best":8.458397842181068,"all":[8.124357027534417,8.458397842181068,7.744550094836234],"n_runs":60},"runs_per_s_combo+zero_head":{"best":8.900616363379099,"all":[8.539838649388951,8.900616363379099,8.178246972182572],"n_runs":60},"cpython_combo_runs_per_s_idle_single":0.13508597990302929,"machine_calibration_python_ns_per_loop_iter":905.5586231406778,"python":"3.12.3","loadavg":[1.03759765625,1.27392578125,1.6279296875]},"warm_single_thread_runs_per_s":{"runs_per_s_qmref":16.41231180028403,"runs_per_s_twocomp":14.403665843838386,"runs_per_s_combo":12.409302229901455,"runs_per_s_combo+head8":8.458397842181068,"runs_per_s_combo+zero_head":8.900616363379099},"per_policy_speedup":{"qmref":{"n":128,"max_abs_err":9.663381206337363e-12,"max_abs_err_10000_10063":9.663381206337363e-12,"max_abs_err_64000_64063":8.981260180007666e-12,"cpython_s_per_run_median_8_parallel_workers":11.70148178585805,"numba_s_per_run_median":0.06284159701317549,"speedup_vs_cpython_same_machine":186.2059900133457},"twocomp":{"n":128,"max_abs_err":1.000444171950221e-11,"max_abs_err_10000_10063":1.8189894035458565e-12,"max_abs_err_64000_64063":1.000444171950221e-11,"cpython_s_per_run_median_8_parallel_workers":16.099760730052367,"numba_s_per_run_median":0.07450192351825535,"speedup_vs_cpython_same_machine":216.09859141566204},"combo":{"n":128,"max_abs_err":1.1937117960769683e-11,"max_abs_err_10000_10063":5.4569682106375694e-12,"max_abs_err_64000_64063":1.1937117960769683e-11,"cpython_s_per_run_median_8_parallel_workers":19.096725174458697,"numba_s_per_run_median":0.08679270651191473,"speedup_vs_cpython_same_machine":220.0268425992354},"head8":{"n":128,"max_abs_err":1.5347723092418164e-11,"cpython_s_per_run_median":33.24268694547936,"numba_s_per_run_median":0.1299358339747414}},"notes":"All timings single-thread, end-to-end: RNG generation (seed MT, gauss, lognormvariate), market, arb routing, policy callbacks; nothing cached. JIT cold = fresh numba cache dir; startup includes imports. CPython per-run times were taken inside 8 parallel workers on this throttled machine; Numba rows timed in the parent while workers ran, so they are conservative. maxrss in speed.jit_*.","speedup_caveat":"CPython per-run medians (~19 s) were measured inside 8 parallel workers on a heavily throttled machine, so speedup_vs_cpython_same_machine (~200x) is inflated by contention. Uncontended single CPython runs measured earlier in the session (QMRef/TwoComp/COMBO seeds 10000/10001, one process) took 1.6-2.4 s against 0.07-0.10 s for the kernel, i.e. about 20-25x. Treat ~20x as the same-machine speedup; the 50 runs/s target remains unmet here."},"versions":{"python":"3.12.3","numpy":"2.5.4","numba":"0.68.1","llvmlite":"0.50.0","platform":"Linux x86_64"},"setup_line":"uv venv --python 3.12 venv && uv pip install --python venv/bin/python numpy==2.5.4 numba==0.68.1","commands":["git clone https://github.com/gtmcknight/amm-sim && git checkout 4812a6382311624e1506aca131ca35c378f930d9; cd research/solved; python3 -I gates.py","curl -sL https://api.imd.fun/artifacts/<sha> -o <sha>; sha256sum each; python3 -I extract_refs.py  (writes qmref.py twocomp.py combo.py blob.bin head.py head8.json; copy replica2.py beside them)","venv/bin/python -I driver.py REFDIR STATEDIR parity | head | invariance | speed  (each resumes; <8 min per call)"],"limitations":["Replica only: no contract, no engine, no training, no policy choice; seeds 10000..10063 and 64000..64063 were used only as implementation checks.","Speed target (>=50 runs/s/core) not met in absolute terms on this throttled machine (best 12.4 runs/s); the only measured evidence is the same-machine speedup over CPython; the >=50 claim on a normal host is an unmeasured extrapolation.","The head path (HEAD8 / residual hook) is slower than plain COMBO (8.5 vs 12.4 runs/s) because it allocates two small arrays per callback; not optimized.","Edge agreement is ~1e-11, not bit-exact on every seed: Python float pow / summation details differ by 1 ulp in places; chaotic amplification was not observed on the 512 parity rows. Hardware/libm: parity is claimed for same-machine glibc libm; numba math.exp/log/erf/tanh/pow/cos/sin were checked bit-identical to CPython math on 1e5 random arguments.","Table decoding uses the reference qmref.Tables (pure Python, first call only, cached to npz); tables are inputs, not retuned.","Only the default configs (cfg drawn from seed) and default 10000 steps were parity tested; the qcap option of replica2.run is not ported.","invariance part (2) numba replay re-run with the final kernel; CPython scrambled-argument part ran before the final kernel fixes but involves only CPython references."],"source_bundle":{"encoding":"base64(zlib(json {filename: text}))","files":["fastsim.py","driver.py","extract_refs.py"],"sha256_of_json":"a5d32e4c06dc93881821d568d8d89ca50adfdba56d5dccd92afef6c6c2157952","b64":"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"}}