From eaaa534d7c87315b7a8dd578f7b681eca1ed8a59 Mon Sep 17 00:00:00 2001 From: LightChainr Date: Fri, 28 Aug 2026 21:35:45 +0800 Subject: [PATCH 1/2] Integrate historical cross-size covariance diagnostics Bring the P33 covariance audit, root-doubling diagnostic, archive validation, synthetic regressions, and committed historical outputs onto current main. Treat these as research diagnostics; further numerical hardening is optional follow-up for precision-sensitive claims. --- .../threshold-rank-covariance-audit.yml | 94 +++ .../ROOT_DOUBLING_REPORT.md | 12 + .../batch_metrics.csv | 501 ++++++++++++ .../checksums.sha256 | 9 + .../cross_size_covariance.csv | 91 +++ .../delta_M_covariance.csv | 16 + .../delta_M_observations.csv | 6 + .../P33-cross-size-covariance/provenance.txt | 6 + .../root_doubling.csv | 5 + .../root_doubling.json | 93 +++ .../P33-cross-size-covariance/summary.json | 753 ++++++++++++++++++ scripts/audit_threshold_rank_covariance.py | 661 +++++++++++++++ scripts/score_threshold_rank_root_doubling.py | 262 ++++++ ...idate_threshold_rank_covariance_archive.py | 413 ++++++++++ .../test_threshold_rank_covariance_archive.py | 70 ++ ...st_threshold_rank_cross_size_covariance.py | 112 +++ tests/test_threshold_rank_root_doubling.py | 69 ++ 17 files changed, 3173 insertions(+) create mode 100644 .github/workflows/threshold-rank-covariance-audit.yml create mode 100644 results/server-20260828/P33-cross-size-covariance/ROOT_DOUBLING_REPORT.md create mode 100644 results/server-20260828/P33-cross-size-covariance/batch_metrics.csv create mode 100644 results/server-20260828/P33-cross-size-covariance/checksums.sha256 create mode 100644 results/server-20260828/P33-cross-size-covariance/cross_size_covariance.csv create mode 100644 results/server-20260828/P33-cross-size-covariance/delta_M_covariance.csv create mode 100644 results/server-20260828/P33-cross-size-covariance/delta_M_observations.csv create mode 100644 results/server-20260828/P33-cross-size-covariance/provenance.txt create mode 100644 results/server-20260828/P33-cross-size-covariance/root_doubling.csv create mode 100644 results/server-20260828/P33-cross-size-covariance/root_doubling.json create mode 100644 results/server-20260828/P33-cross-size-covariance/summary.json create mode 100644 scripts/audit_threshold_rank_covariance.py create mode 100644 scripts/score_threshold_rank_root_doubling.py create mode 100644 scripts/validate_threshold_rank_covariance_archive.py create mode 100644 tests/test_threshold_rank_covariance_archive.py create mode 100644 tests/test_threshold_rank_cross_size_covariance.py create mode 100644 tests/test_threshold_rank_root_doubling.py diff --git a/.github/workflows/threshold-rank-covariance-audit.yml b/.github/workflows/threshold-rank-covariance-audit.yml new file mode 100644 index 000000000..911a7078d --- /dev/null +++ b/.github/workflows/threshold-rank-covariance-audit.yml @@ -0,0 +1,94 @@ +name: Threshold-rank covariance audit + +on: + push: + branches: + - research/threshold-rank-covariance-audit-20260828 + paths: + - .github/workflows/threshold-rank-covariance-audit.yml + - scripts/audit_threshold_rank_covariance.py + - scripts/score_threshold_rank_root_doubling.py + - tests/test_threshold_rank_cross_size_covariance.py + - tests/test_threshold_rank_root_doubling.py + workflow_dispatch: + +permissions: + contents: write + +concurrency: + group: threshold-rank-covariance-audit + cancel-in-progress: false + +jobs: + audit: + runs-on: ubuntu-latest + timeout-minutes: 45 + steps: + - name: Check out audit branch + uses: actions/checkout@v4 + with: + ref: ${{ github.ref_name }} + fetch-depth: 0 + + - name: Set up Python 3.9 + uses: actions/setup-python@v5 + with: + python-version: '3.9' + cache: pip + + - name: Install dependencies + run: python -m pip install --upgrade pip && python -m pip install -r requirements.txt + + - name: Run covariance regression tests + run: >- + python -m unittest + tests.test_threshold_rank_cross_size_covariance + tests.test_threshold_rank_root_doubling + -v + + - name: Reconstruct aligned cross-size covariance + run: | + rm -rf results/server-20260828/P33-cross-size-covariance + python scripts/audit_threshold_rank_covariance.py \ + --histograms results/server-20260828/P33/p33_all_sizes_arm_10m.hist.csv \ + --p 0.592746050790 \ + --training-sizes 65,85,130 \ + --heldout-sizes 145,170 \ + --seed-label p33-working-tree-10m \ + --output-dir results/server-20260828/P33-cross-size-covariance + + - name: Score no-fit root-gap doubling relation + run: | + python scripts/score_threshold_rank_root_doubling.py \ + --summary results/server-20260828/P33-cross-size-covariance/summary.json \ + --json results/server-20260828/P33-cross-size-covariance/root_doubling.json \ + --csv results/server-20260828/P33-cross-size-covariance/root_doubling.csv \ + --report results/server-20260828/P33-cross-size-covariance/ROOT_DOUBLING_REPORT.md + + - name: Record commands and source state + run: | + { + echo "source_commit=$(git rev-parse HEAD)" + echo "python=$(python --version 2>&1)" + echo "mpmath=$(python -c 'import mpmath; print(mpmath.__version__)')" + echo + echo "python scripts/audit_threshold_rank_covariance.py --histograms results/server-20260828/P33/p33_all_sizes_arm_10m.hist.csv --p 0.592746050790 --training-sizes 65,85,130 --heldout-sizes 145,170 --seed-label p33-working-tree-10m --output-dir results/server-20260828/P33-cross-size-covariance" + echo "python scripts/score_threshold_rank_root_doubling.py --summary results/server-20260828/P33-cross-size-covariance/summary.json --json results/server-20260828/P33-cross-size-covariance/root_doubling.json --csv results/server-20260828/P33-cross-size-covariance/root_doubling.csv --report results/server-20260828/P33-cross-size-covariance/ROOT_DOUBLING_REPORT.md" + } > results/server-20260828/P33-cross-size-covariance/provenance.txt + sha256sum \ + results/server-20260828/P33-cross-size-covariance/* \ + > results/server-20260828/P33-cross-size-covariance/checksums.sha256 + + - name: Commit generated audit outputs + env: + BRANCH_NAME: ${{ github.ref_name }} + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add results/server-20260828/P33-cross-size-covariance + if git diff --cached --quiet; then + echo "Audit outputs are already current." + exit 0 + fi + git commit -m "analysis: record P33 cross-size covariance audit [skip ci]" + git push origin "HEAD:${BRANCH_NAME}" diff --git a/results/server-20260828/P33-cross-size-covariance/ROOT_DOUBLING_REPORT.md b/results/server-20260828/P33-cross-size-covariance/ROOT_DOUBLING_REPORT.md new file mode 100644 index 000000000..039dff298 --- /dev/null +++ b/results/server-20260828/P33-cross-size-covariance/ROOT_DOUBLING_REPORT.md @@ -0,0 +1,12 @@ +# Threshold-rank Gaussian root-gap doubling audit + +Frozen lineage prediction: `Delta p*(2N) / Delta p*(N) = -1/4`. +Child signs follow multiplication by `1+i`, not stored display order. + +| lineage | observed ratio | ratio SE | full-cov residual z | diagonal residual z | +|---|---:|---:|---:|---:| +| 65->130 | -0.48492843 | 0.262 | 0.942 | 0.889 | +| 85->170 | -0.61670569 | 0.268 | 1.649 | 1.628 | + +Full-covariance joint residual chi-square: **3.46246 / 2**. +Diagonal diagnostic chi-square: **3.44173 / 2**. diff --git a/results/server-20260828/P33-cross-size-covariance/batch_metrics.csv b/results/server-20260828/P33-cross-size-covariance/batch_metrics.csv new file mode 100644 index 000000000..4e5c8644d --- /dev/null +++ b/results/server-20260828/P33-cross-size-covariance/batch_metrics.csv @@ -0,0 +1,501 @@ +N,batch,samples,a1,b1,a2,b2,delta_cos4,delta_M,mean_M_prime,root_gap_jackknife_pseudovalue,A_M,B,A_p_jackknife_pseudovalue +65,0,100000,8,1,7,4,1.3633136094674556,0.0007041719403821889,8.379718882803383,-8.388837567230648e-05,0.45610743303892876,1.751406433621403,0.25997568333081 +85,0,100000,9,2,7,6,1.5944636678200692,0.0017391834254355998,9.273294705516141,-0.00018760766740153183,1.4894863051832616,1.7526773115591205,0.8501074212805632 +130,0,100000,11,3,9,7,1.3633136094674556,0.0006030977971827908,10.840844655279309,-5.563017084704667e-05,1.2048969903319424,1.7471667820519532,0.6896064711642795 +145,0,100000,12,1,9,8,1.9177170035671818,9.612384251684335e-05,11.290169736509009,-8.552714727008692e-06,0.16303078057511003,1.7465759283115596,0.09376817684823653 +170,0,100000,13,1,11,7,1.5944636678200692,0.002515276647745369,11.981608427108599,-0.00020992037430576406,6.6443213435685164,1.7462112294028227,3.804852339928759 +65,1,100000,8,1,7,4,1.3633136094674556,-0.0026467316683402285,8.370085722923266,0.0003157565781058934,-1.714345485754941,1.74939305126024,-0.9785507408075543 +85,1,100000,9,2,7,6,1.5944636678200692,0.00029590401025817234,9.256991604238705,-3.182470930277945e-05,0.25342063665191905,1.7495959821476854,0.1442074406292015 +130,1,100000,11,3,9,7,1.3633136094674556,-0.002321082688068331,10.837723009847823,0.00021407101056841737,-4.6371675675636315,1.7466636814747687,-2.653681481269344 +145,1,100000,12,1,9,8,1.9177170035671818,-0.004002970003242437,11.316367580815959,0.0003545920606113232,-6.789234670191339,1.7506287038949249,-3.8875903277101513 +170,1,100000,13,1,11,7,1.5944636678200692,-0.000362784841690433,11.970126709213385,3.02157807030249e-05,-0.9583276133571806,1.7445378727042264,-0.5476675824864025 +65,2,100000,8,1,7,4,1.3633136094674556,-0.0004217542629737811,8.372287556692463,5.027908742566943e-05,-0.27317938024311295,1.7498532463912546,-0.1558182526003195 +85,2,100000,9,2,7,6,1.5944636678200692,0.004659410500958799,9.260645331849949,-0.0005031679604164093,3.9904520879774203,1.7502865463635555,2.280007119245818 +130,2,100000,11,3,9,7,1.3633136094674556,-0.004348380759735202,10.83193231075483,0.00040106291643806063,-8.687398486110359,1.7457304223587267,-4.971683140793164 +145,2,100000,12,1,9,8,1.9177170035671818,0.0011518252076464011,11.298394902013253,-0.00010197751451760349,1.9535523942020585,1.747848351703888,1.1180363102294941 +170,2,100000,13,1,11,7,1.5944636678200692,0.002007775693410279,11.983875955916906,-0.00016754586065114048,5.3037135715397,1.7465417012499163,3.0368050840807084 +65,3,100000,8,1,7,4,1.3633136094674556,0.0009243224394849844,8.37809565003368,-0.00011043885862250906,0.5987036844225274,1.7510671692193527,0.34225740463514337 +85,3,100000,9,2,7,6,1.5944636678200692,0.002181476262709371,9.263355853233813,-0.0002355644130049338,1.8682785098266157,1.75079884209909,1.0674140266159438 +130,3,100000,11,3,9,7,1.3633136094674556,0.001199540096274106,10.857011140745088,-0.00011057797153602063,2.3964973152523403,1.7497722567438703,1.370754099409846 +145,3,100000,12,1,9,8,1.9177170035671818,0.0014057846081887615,11.283405497874185,-0.00012454867331458327,2.3842800702992055,1.745529508581063,1.365496500040485 +170,3,100000,13,1,11,7,1.5944636678200692,-0.000708158624149756,11.984158636629854,5.913853370421735e-05,-1.8706624041884192,1.7465828994111052,-1.071898757272122 +65,4,100000,8,1,7,4,1.3633136094674556,0.0009413953088483224,8.380791073853594,-0.00011229442337378284,0.6097621520685041,1.751630527332621,0.34800792382580426 +85,4,100000,9,2,7,6,1.5944636678200692,0.0006059123461193517,9.237140898770805,-6.576580240218698e-05,0.5189206201526404,1.7458441461285699,0.2980048601580435 +130,4,100000,11,3,9,7,1.3633136094674556,0.003533226225659194,10.84210071387054,-0.0003258863528012956,7.058844627430067,1.747369214972698,4.039774358662242 +145,4,100000,12,1,9,8,1.9177170035671818,0.0006936158410918968,11.287413390917832,-6.14228952495327e-05,1.1764066961082915,1.74614952490293,0.6734134234713657 +170,4,100000,13,1,11,7,1.5944636678200692,0.001839536699508689,11.994670786080816,-0.00015345143692001035,4.859295682556066,1.7481149502645532,2.781340595268269 +65,5,100000,8,1,7,4,1.3633136094674556,0.0013766871224511353,8.393090460828036,-0.0001642889085322844,0.8917100973636284,1.7542011655339627,0.5091423086578315 +85,5,100000,9,2,7,6,1.5944636678200692,1.813028610721054e-05,9.256643277176764,-1.9840134555040856e-06,0.015527294286961571,1.749530147408485,0.008990168609871785 +130,5,100000,11,3,9,7,1.3633136094674556,0.0035585528696489344,10.862354308786713,-0.00032816124698173497,7.1094433814978055,1.7506333894332593,4.067974555141204 +145,5,100000,12,1,9,8,1.9177170035671818,-0.000246023202167812,11.316357842166644,2.195274794200737e-05,-0.417267492006245,1.750627197337374,-0.24068020704940038 +170,5,100000,13,1,11,7,1.5944636678200692,0.0005399137257643872,11.984573398913618,-4.506940847641937e-05,1.4262289179989551,1.7466433472684901,0.8168928093227044 +65,6,100000,8,1,7,4,1.3633136094674556,-0.00017987160859495426,8.370715100831303,2.1355378066160655e-05,-0.11650674070923633,1.7495245946369011,-0.06618174402643386 +85,6,100000,9,2,7,6,1.5944636678200692,0.0005458590404258916,9.24446136695407,-5.9167503908061705e-05,0.4674892558104984,1.7472277340444338,0.26810596212593435 +130,6,100000,11,3,9,7,1.3633136094674556,0.0030010094883439215,10.860430407616734,-0.0002767233304784519,5.995557134106495,1.7503233235368254,3.430336389667997 +145,6,100000,12,1,9,8,1.9177170035671818,0.00030809953369563396,11.28679871158519,-2.725723110427649e-05,0.5225520137152766,1.7460544347359013,0.298836211443821 +170,6,100000,13,1,11,7,1.5944636678200692,0.0025632576193856046,11.962476747095115,-0.0002140231510475831,6.771067240183959,1.7434229598077904,3.8792160587337654 +65,7,100000,8,1,7,4,1.3633136094674556,0.003693149837731946,8.385735834379528,-0.0004406698747920247,2.3921332216131868,1.7526640089468561,1.365665396477324 +85,7,100000,9,2,7,6,1.5944636678200692,-0.0051702854279820345,9.266028135689046,0.0005585227217102841,-4.427979950958302,1.7513039105756238,-2.5308363845466926 +130,7,100000,11,3,9,7,1.3633136094674556,-0.0001903771540570834,10.831459712463493,1.751746940295215e-05,-0.38034438365195494,1.7456542559655965,-0.2171512342090783 +145,7,100000,12,1,9,8,1.9177170035671818,0.0030856846929299244,11.306306661677064,-0.0002732162583321948,5.233473516301484,1.749072291582729,2.9954220673588337 +170,7,100000,13,1,11,7,1.5944636678200692,-0.004728988824382976,11.99031735610284,0.00039475116903482047,-12.492033990579017,1.7474804771585253,-7.154950605242457 +65,8,100000,8,1,7,4,1.3633136094674556,-0.0004101328608349287,8.378200040133237,4.899475324857648e-05,-0.2656519461124826,1.7510889873130775,-0.1518380151402553 +85,8,100000,9,2,7,6,1.5944636678200692,-0.00017125691460655372,9.243866921524726,1.8372260495695333e-05,-0.14666930770140701,1.7471153822805725,-0.08325030213004393 +130,8,100000,11,3,9,7,1.3633136094674556,0.0013855291748977574,10.84225870518231,-0.00012780008619582214,2.768074996542275,1.7473946776723819,1.5842440372564568 +145,8,100000,12,1,9,8,1.9177170035671818,-0.0009284054920541112,11.290091805881758,8.222067205659704e-05,-1.5746215308993599,1.7465638725355341,-0.9014310384558224 +170,8,100000,13,1,11,7,1.5944636678200692,0.001597125043353004,11.992568708067434,-0.00013323232160678336,4.218944275338587,1.7478085913767314,2.414864742387186 +65,9,100000,8,1,7,4,1.3633136094674556,0.0002593461418238809,8.381713749342431,-3.094932876106064e-05,0.16798411898042775,1.7518233714852582,0.09591403849225835 +85,9,100000,9,2,7,6,1.5944636678200692,0.0009228015811536231,9.254605009103148,-9.961014287873313e-05,0.7903136020201673,1.7491449093328122,0.4513638641153792 +130,9,100000,11,3,9,7,1.3633136094674556,-0.0026263141278191136,10.854947410468192,0.00024231086507840293,-5.246973215716143,1.7494396552629374,-3.003750268014004 +145,9,100000,12,1,9,8,1.9177170035671818,0.0009932088637348792,11.289092514111376,-8.799719250568352e-05,1.6845312472859404,1.7464092832784863,0.9647622506295317 +170,9,100000,13,1,11,7,1.5944636678200692,-0.002038595765771714,12.00305865255928,0.00017028234234554764,-5.385127464832498,1.749337406057908,-3.086404408646372 +65,10,100000,8,1,7,4,1.3633136094674556,0.0009808446600167926,8.38100367769846,-0.00011706802347206599,0.6353143521273938,1.751674962682651,0.36280162959914025 +85,10,100000,9,2,7,6,1.5944636678200692,-0.0007781624792532493,9.242486026083418,8.408947381792486e-05,-0.6664405485378102,1.746854389377136,-0.381034990383404 +130,10,100000,11,3,9,7,1.3633136094674556,0.0014125116377069682,10.84049190745388,-0.0001302953583535672,2.821981822901828,1.7471099313818597,1.6151760980626009 +145,10,100000,12,1,9,8,1.9177170035671818,-0.0034033815111343506,11.280764958579274,0.0003012833181490846,-5.772302998165162,1.745121020269737,-3.3031368821894027 +170,10,100000,13,1,11,7,1.5944636678200692,0.0034583197074661252,11.993390852395398,-0.00028856286181047543,9.135451349177783,1.7479284114882312,5.230264492463698 +65,11,100000,8,1,7,4,1.3633136094674556,0.0021480969194023944,8.377881236264493,-0.00025620864695966375,1.3913689478960083,1.7510223555853797,0.7940077219851299 +85,11,100000,9,2,7,6,1.5944636678200692,-0.004283163265002981,9.263003093055813,0.00046275336646241574,-3.6682232206117584,1.7507321694891886,-2.096876297759734 +130,11,100000,11,3,9,7,1.3633136094674556,0.004037943047034545,10.859962802130305,-0.0003723867070351797,8.067191502324635,1.7502479618100437,4.616205182131844 +145,11,100000,12,1,9,8,1.9177170035671818,0.00015002243489313123,11.291989843534882,-1.326636379088246e-05,0.2544454531155482,1.7468574967195227,0.14544653782829767 +170,11,100000,13,1,11,7,1.5944636678200692,0.0006690218635378934,11.986818341315516,-5.583527785288887e-05,1.7672792578118082,1.7469705273508145,1.012026528114395 +65,12,100000,8,1,7,4,1.3633136094674556,-0.0005229155833288549,8.37955985175656,6.236231133705493e-05,-0.3387037607302689,1.751373195275052,-0.19326497114774585 +85,12,100000,9,2,7,6,1.5944636678200692,-0.0010576180919982944,9.25918756001019,0.00011426654953514137,-0.9057743082797349,1.750011023616774,-0.5177765019381805 +130,12,100000,11,3,9,7,1.3633136094674556,0.0010740833950518536,10.846284477119212,-9.905842405116393e-05,2.1458540490593943,1.7480434919690473,1.2279547089085474 +145,12,100000,12,1,9,8,1.9177170035671818,0.00242676434304773,11.29393263673852,-0.00021488949730164974,4.1159120854910665,1.7471580445343344,2.3559532883960834 +170,12,100000,13,1,11,7,1.5944636678200692,-0.0018411438039546077,11.990665220918263,0.00015367239252623253,-4.863540988288512,1.747531175314011,-2.785345463581482 +65,13,100000,8,1,7,4,1.3633136094674556,0.0034842184461664704,8.390775347951806,-0.0004157717364794717,2.2568038294245985,1.7537172944587274,1.2885044016482412 +85,13,100000,9,2,7,6,1.5944636678200692,0.0025547653635374346,9.25966425009044,-0.0002759801270478413,2.18797394587202,1.7501011193071225,1.2505499235656876 +130,13,100000,11,3,9,7,1.3633136094674556,0.0009486392081665936,10.853435020835581,-8.745179979498339e-05,1.895235784594275,1.7491959107013613,1.0840758914689759 +145,13,100000,12,1,9,8,1.9177170035671818,0.0015881145052189269,11.28827774057805,-0.00014064046466065114,2.693520573557267,1.7462832387748566,1.541919774393136 +170,13,100000,13,1,11,7,1.5944636678200692,-0.0033934004225421744,11.994473382503491,0.00028326989249267704,-8.963961429444279,1.748086180475794,-5.134328274930747 +65,14,100000,8,1,7,4,1.3633136094674556,-0.00029160601938885643,8.375044434727672,3.464705655527485e-05,-0.18887954111031993,1.7504294487669072,-0.1073735440836811 +85,14,100000,9,2,7,6,1.5944636678200692,0.0015106475593002898,9.259397348855643,-0.00016307728083579318,1.2937616691998652,1.7500506742653643,0.7389527762959137 +130,14,100000,11,3,9,7,1.3633136094674556,-0.0003437977065455832,10.822647695729694,3.163773097624584e-05,-0.6868551399703532,1.7442340656197564,-0.3921897718804503 +145,14,100000,12,1,9,8,1.9177170035671818,0.0024921741470493516,11.275512752801905,-0.0002207751844568789,4.226850341020965,1.7443085102370819,2.420481355993393 +170,14,100000,13,1,11,7,1.5944636678200692,0.001509381890492127,11.954548906459404,-0.00012606098381667558,3.9871631295834673,1.7422675486267947,2.2848826886615803 +65,15,100000,8,1,7,4,1.3633136094674556,0.002104049475889593,8.384933131575877,-0.000251239105469812,1.3628384637337922,1.752496239732368,0.7786067807425457 +85,15,100000,9,2,7,6,1.5944636678200692,0.0030223423538043464,9.251235593708822,-0.0003263961353859642,2.5884202205063005,1.748508080880532,1.479000196591315 +130,15,100000,11,3,9,7,1.3633136094674556,-0.0017292607453954871,10.845334061544515,0.00015951881513885484,-3.4547980068225788,1.7478903180629486,-1.9774378815889033 +145,15,100000,12,1,9,8,1.9177170035671818,-0.0019185838625893302,11.2924769844396,0.00016984816084685342,-3.254012912165259,1.7469328568423315,-1.862140021266173 +170,15,100000,13,1,11,7,1.5944636678200692,-0.002307992327246094,11.978170316222227,0.00019261782510043499,-6.096761839084199,1.745710155788688,-3.491239880688678 +65,16,100000,8,1,7,4,1.3633136094674556,0.001335012494923836,8.38988205960953,-0.00015925321972018285,0.8647165375605875,1.7535305923781896,0.49353637244228976 +85,16,100000,9,2,7,6,1.5944636678200692,-0.0005830371235415817,9.261774150991947,6.294577096204249e-05,-0.49932962689724314,1.7504998961773877,-0.2852264396983914 +130,16,100000,11,3,9,7,1.3633136094674556,0.004900953808509483,10.836239600222475,-0.00045207471170189816,9.79135477067441,1.7464246074815515,5.604038993453956 +145,16,100000,12,1,9,8,1.9177170035671818,0.00016971960507189307,11.299869991523487,-1.5009329852982457e-05,0.2878528257848382,1.7480765463095322,0.16455564589141997 +170,16,100000,13,1,11,7,1.5944636678200692,-0.0033941850247502163,11.98968241863531,0.0002833104307621648,-8.9660340242031,1.747387940756379,-5.13506303986258 +65,17,100000,8,1,7,4,1.3633136094674556,0.003977252825843394,8.373724226641174,-0.0004747226114130646,2.576152886690826,1.7501535181576888,1.4711971033603015 +85,17,100000,9,2,7,6,1.5944636678200692,-0.001957594036672481,9.25986816816026,0.00021151618568903893,-1.6765393839938305,1.750139660363537,-0.9584441918909625 +130,17,100000,11,3,9,7,1.3633136094674556,0.0016550342046086927,10.831521521485945,-0.00015269868272025072,3.3065047515420374,1.745664217428406,1.8928936966897052 +145,17,100000,12,1,9,8,1.9177170035671818,-0.00028278064785845503,11.288121608245474,2.4993394998681397e-05,-0.4796099338602803,1.7462590852873474,-0.2740165148819193 +170,17,100000,13,1,11,7,1.5944636678200692,-0.003408373089998099,11.97596334368166,0.0002844840007568709,-9.003513028683562,1.7453885094707697,-5.156334250697616 +65,18,100000,8,1,7,4,1.3633136094674556,-0.000981516529099786,8.393254209869662,0.00011746628451271904,-0.6357495362993391,1.7542353899666687,-0.36403586718400266 +85,18,100000,9,2,7,6,1.5944636678200692,0.00419809917354157,9.269040718136202,-0.00045339970744780016,3.595371905769626,1.7518732966538204,2.054492022881278 +130,18,100000,11,3,9,7,1.3633136094674556,-0.001263391974145094,10.840811718616235,0.00011652703358134425,-2.524063583663827,1.747161473808411,-1.4445002630715162 +145,18,100000,12,1,9,8,1.9177170035671818,0.0008321146710405851,11.295184371332773,-7.364031953404227e-05,1.4113075465535654,1.7473516863981842,0.8073598530561285 +170,18,100000,13,1,11,7,1.5944636678200692,-0.0021129790670708862,11.970133167379585,0.00017631210363555378,-5.58161740436666,1.7445388139236302,-3.19569514056968 +65,19,100000,8,1,7,4,1.3633136094674556,0.003982420362601702,8.383794885468438,-0.00047541920145593823,2.5795000122872915,1.7522583401579914,1.4733558824634387 +85,19,100000,9,2,7,6,1.5944636678200692,0.0006746963301801418,9.253768760277648,-7.286713613695144e-05,0.5778291865385177,1.748986856085308,0.3301831639157075 +130,19,100000,11,3,9,7,1.3633136094674556,-0.0005131880311666147,10.84061240505795,4.734561549183617e-05,-1.0252710540735386,1.747129351401041,-0.5869089080131653 +145,19,100000,12,1,9,8,1.9177170035671818,-0.0016595919443207245,11.293026296163974,0.00014699453350743193,-2.8147498376520104,1.7470178347175382,-1.6115829714420569 +170,19,100000,13,1,11,7,1.5944636678200692,-0.00031796584954142096,11.964810571128089,2.6508398746336904e-05,-0.839934359716535,1.7437630935852064,-0.48047047996805653 +65,20,100000,8,1,7,4,1.3633136094674556,0.0010774687073451937,8.368438816124536,-0.00012870096720507887,0.6978998425019032,1.7490488388584624,0.39885289977693766 +85,20,100000,9,2,7,6,1.5944636678200692,0.0031322180076992574,9.260044622356167,-0.0003382458183960541,2.6825208653008747,1.7501730106748898,1.5326947156172328 +130,20,100000,11,3,9,7,1.3633136094674556,0.0026840135207079094,10.840897379967597,-0.00024755748765524456,5.362247761835268,1.747175279436327,3.068788804219375 +145,20,100000,12,1,9,8,1.9177170035671818,0.002164066314773393,11.299842765029254,-0.00019162341000004447,3.6703632655133074,1.7480723344030198,2.1008742101971953 +170,20,100000,13,1,11,7,1.5944636678200692,2.3446785708535653e-05,11.98139226913266,-1.987724199797522e-06,0.061936717323299265,1.7461797263298249,0.036027932485088725 +65,21,100000,8,1,7,4,1.3633136094674556,0.0027567210097725,8.37811440920671,-0.0003290743964516601,1.785587966895396,1.7510710899876738,1.019823550027763 +85,21,100000,9,2,7,6,1.5944636678200692,-0.001979556600512091,9.250649041355501,0.00021384109011054857,-1.6953487502673266,1.748397220928988,-0.9689790411850655 +130,21,100000,11,3,9,7,1.3633136094674556,0.0012580517150268286,10.818346542976583,-0.0001161247775727358,2.5133945641959268,1.7435408695216914,1.4395137900411923 +145,21,100000,12,1,9,8,1.9177170035671818,-0.001966621661678952,11.298162389605167,0.00017421017707701988,-3.3354873900641118,1.7478123823088767,-1.909963235571858 +170,21,100000,13,1,11,7,1.5944636678200692,-0.0011709893956527067,11.974031975394599,9.772729643812202e-05,-3.093270015289117,1.7451070299839797,-1.7713284561216123 +65,22,100000,8,1,7,4,1.3633136094674556,-0.0010817028254295603,8.377500852810826,0.00012899935558152546,-0.7006423725856721,1.7509428533923692,-0.3997776252999076 +85,22,100000,9,2,7,6,1.5944636678200692,0.0021088793618175734,9.254101631201133,-0.00022786428026656813,1.8061044526825303,1.7490497695733178,1.0325223823862868 +130,22,100000,11,3,9,7,1.3633136094674556,0.0022318084399123874,10.849829575453914,-0.00020582466221986864,4.458811298614035,1.7486148384135773,2.551457542387877 +145,22,100000,12,1,9,8,1.9177170035671818,-0.0018127740604077665,11.308120944612138,0.00016048504105764787,-3.0745542660012166,1.7493529590107217,-1.759486922189581 +170,22,100000,13,1,11,7,1.5944636678200692,0.0012055672685916243,11.974060742375519,-0.00010061913507531783,3.184610464614717,1.7451112225116714,1.823743658989935 +65,23,100000,8,1,7,4,1.3633136094674556,0.0010538267871446536,8.370543824224509,-0.00012586422672873458,0.6825864582041321,1.7494887969024826,0.3900616514322253 +85,23,100000,9,2,7,6,1.5944636678200692,-0.001466922850904172,9.256944801509347,0.00015826471819835146,-1.2563145814449683,1.749587136307618,-0.7171455907467726 +130,23,100000,11,3,9,7,1.3633136094674556,0.0029885785611783807,10.848738143358709,-0.0002756261452571667,5.970722046333398,1.7484389375532436,3.416735388320286 +145,23,100000,12,1,9,8,1.9177170035671818,0.0006513110110424511,11.278270959956913,-5.7750865384192766e-05,1.1046556166209107,1.7447352016274387,0.6331549141213612 +170,23,100000,13,1,11,7,1.5944636678200692,-0.002343414166733286,11.97577762006622,0.00019555603078313943,-6.190331699220328,1.7453614419309798,-3.544495496319138 +65,24,100000,8,1,7,4,1.3633136094674556,0.00021191523121323887,8.382586401919696,-2.5332510959732296e-05,0.13726208982150215,1.7520057605796315,0.07850714469627974 +85,24,100000,9,2,7,6,1.5944636678200692,-0.0007392785982688069,9.280693551775293,8.009031421053574e-05,-0.6331392834891297,1.7540757131393503,-0.36291358144412733 +130,24,100000,11,3,9,7,1.3633136094674556,0.004272836299997679,10.84554221454198,-0.00039411376544786804,8.536472230701726,1.747923865080208,4.885539607186007 +145,24,100000,12,1,9,8,1.9177170035671818,0.004933611103766335,11.259005277526672,-0.000437031300785813,8.367647903381688,1.7417548233018283,4.791417650221519 +170,24,100000,13,1,11,7,1.5944636678200692,0.0028910586838407164,11.962532218941366,-0.0002413353683095856,7.636982172824032,1.743431044328448,4.374255923738042 +65,25,100000,8,1,7,4,1.3633136094674556,0.0035062082876562567,8.375140998094075,-0.0004184671061384683,2.271047126522457,1.7504496310311977,1.2968575323807283 +85,25,100000,9,2,7,6,1.5944636678200692,-0.0003761911477973735,9.242978498046584,4.0460080189123546e-05,-0.32218083186655155,1.7469474678852421,-0.18333693345680271 +130,25,100000,11,3,9,7,1.3633136094674556,0.000715643016167598,10.844662828917285,-6.601932321433513e-05,1.4297450933502052,1.7477821387294543,0.8183931815645076 +145,25,100000,12,1,9,8,1.9177170035671818,-0.0011684604917858933,11.29350510860258,0.00010345716956421114,-1.9817666570461072,1.7470919064364727,-1.1342585929213918 +170,25,100000,13,1,11,7,1.5944636678200692,0.0011598347026178116,11.984014006650273,-9.677684336096334e-05,3.063803926507534,1.7465618208976497,1.7541012878365927 +65,26,100000,8,1,7,4,1.3633136094674556,-0.0013359643963656023,8.374865416740455,0.00015915235353826385,-0.865333104762732,1.7503920330422358,-0.49322378140259915 +85,26,100000,9,2,7,6,1.5944636678200692,-0.0013168626757697995,9.261464489713738,0.00014225118585303904,-1.1277987661794977,1.7504413693739354,-0.6445834035173434 +130,26,100000,11,3,9,7,1.3633136094674556,-0.0001726713744114186,10.830156689141868,1.588926691204872e-05,-0.3449709488521655,1.7454442539651827,-0.1969676008138123 +145,26,100000,12,1,9,8,1.9177170035671818,4.798305165405592e-05,11.291791333101258,-4.227984956514663e-06,0.08138162354637271,1.7468267873898156,0.04635375477474962 +170,26,100000,13,1,11,7,1.5944636678200692,-0.0004924149457856226,11.989693899422893,4.1160730398639295e-05,-1.3007567724640838,1.747389613977493,-0.7460471709255105 +65,27,100000,8,1,7,4,1.3633136094674556,0.002845067037825487,8.36356655496938,-0.00033971243656314223,1.8428116047082899,1.7480305100036682,1.0527915473828022 +85,27,100000,9,2,7,6,1.5944636678200692,0.002590026386273073,9.271684904717905,-0.0002796420708773015,2.2181724917547436,1.7523730549356877,1.267143305216097 +130,27,100000,11,3,9,7,1.3633136094674556,0.0038889350210616716,10.843423403781284,-0.0003586995071594946,7.769496297884014,1.7475823865426716,4.446534993047885 +145,27,100000,12,1,9,8,1.9177170035671818,0.0010587926641696388,11.288346238339773,-9.378480719970505e-05,1.7957646093530837,1.7462938352977224,1.0282150951918185 +170,27,100000,13,1,11,7,1.5944636678200692,-0.0009782086957230139,11.97856107939873,8.161200840149478e-05,-2.584023082026687,1.7457671059929114,-1.4792353632164161 +65,28,100000,8,1,7,4,1.3633136094674556,0.002988240381971836,8.377137459221046,-0.0003563893843623201,1.935548083873801,1.7508669021725276,1.1044745233042779 +85,28,100000,9,2,7,6,1.5944636678200692,0.0021073762339057747,9.264986118228842,-0.00022757729082741995,1.8048171310539893,1.751106966510031,1.031221945919973 +130,28,100000,11,3,9,7,1.3633136094674556,0.0013037538494199644,10.819278636126583,-0.00012034647495773407,2.6047004260963735,1.7436910904907437,1.4918470795433345 +145,28,100000,12,1,9,8,1.9177170035671818,-0.00023770441915437133,11.289943666457885,2.1099734929250387e-05,-0.40315842548740966,1.7465409555415643,-0.23132815011928234 +170,28,100000,13,1,11,7,1.5944636678200692,-0.0010345066454585565,11.988366155922577,8.63498928073362e-05,-2.7327389973763214,1.7471961073523914,-1.565110546259012 +65,29,100000,8,1,7,4,1.3633136094674556,0.002493220300521331,8.374331594891387,-0.00029738478326945574,1.6149128445165382,1.7502804613971792,0.921615320633564 +85,29,100000,9,2,7,6,1.5944636678200692,0.00129790188293171,9.25724705813403,-0.00014026633026226632,1.1115602022335025,1.7496442636119012,0.6355894189363469 +130,29,100000,11,3,9,7,1.3633136094674556,0.001750623461465173,10.86025655202143,-0.00016139434023134183,3.4974774402708806,1.7502953040668812,2.0006873920778445 +145,29,100000,12,1,9,8,1.9177170035671818,0.0015407306142974887,11.285048226796295,-0.0001365283787921898,2.613155156181715,1.7457836368057984,1.4968366858959388 +170,29,100000,13,1,11,7,1.5944636678200692,0.0033591670422406807,11.986433348623258,-0.00028038926841940544,8.873530987288502,1.7469144181425602,5.082116338467266 +65,30,100000,8,1,7,4,1.3633136094674556,0.0019688042942543438,8.37805539402965,-0.00023509135910726453,1.275237227318355,1.7510587554974324,0.7285638354451587 +85,30,100000,9,2,7,6,1.5944636678200692,0.0015498912530753223,9.254276508361254,-0.00016734591066880702,1.3273710881880183,1.7490828218207217,0.7582952368147479 +130,30,100000,11,3,9,7,1.3633136094674556,-0.006695303123581996,10.838349552045262,0.0006175356644855558,-13.37618976664734,1.746764658266682,-7.655137201984358 +145,30,100000,12,1,9,8,1.9177170035671818,-0.0004839812209076808,11.284539707959766,4.277502376885071e-05,-0.820856034905679,1.7457049695421785,-0.46896641843775577 +170,30,100000,13,1,11,7,1.5944636678200692,0.004611967557509955,12.000510070106847,-0.00038487049452691664,12.182912168201028,1.748965973180213,6.975861235543101 +65,31,100000,8,1,7,4,1.3633136094674556,0.0006065707890025596,8.389811830281305,-7.23167050921264e-05,0.3928890511857052,1.7535159140698833,0.22411430274915603 +85,31,100000,9,2,7,6,1.5944636678200692,0.004152146200940822,9.259339959632959,-0.0004484321406996424,3.5560164689765608,1.7500398275499607,2.0319824665459434 +130,31,100000,11,3,9,7,1.3633136094674556,-0.003216816333385182,10.832480004023026,0.00029666962471849856,-6.426706143931905,1.745818691448025,-3.6775959859310055 +145,31,100000,12,1,9,8,1.9177170035671818,-0.0005291215505682748,11.28464381338846,4.6907711887812266e-05,-0.8974162616641433,1.7457210745290834,-0.5142753808860948 +170,31,100000,13,1,11,7,1.5944636678200692,0.001290146770797576,11.973390905940866,-0.00010770904440462591,3.4080345528712295,1.7450135999002188,1.9522498041924394 +65,32,100000,8,1,7,4,1.3633136094674556,-0.0021866278582719123,8.379198442467434,0.00026103231732292967,-1.416326272396637,1.7512976587847473,-0.8089565988563578 +85,32,100000,9,2,7,6,1.5944636678200692,0.0006021972407262446,9.253935579696044,-6.510046434708185e-05,0.515738897900452,1.7490183853981391,0.2949900109989487 +130,32,100000,11,3,9,7,1.3633136094674556,-0.0017584286642141583,10.858659883227316,0.0001622718115437691,-3.5130710394269604,1.7500379766382794,-2.0115647610683984 +145,32,100000,12,1,9,8,1.9177170035671818,0.0014428411279933326,11.282536906334974,-0.00012781427912422327,2.44712975660963,1.745395138495464,1.4012991560215118 +170,32,100000,13,1,11,7,1.5944636678200692,-0.0018222762528771782,12.002706868664967,0.0001521613616054041,-4.813700716270321,1.7492861367320651,-2.7579577002267697 +65,33,100000,8,1,7,4,1.3633136094674556,0.0006736098992332887,8.368611878405458,-8.066396849298711e-05,0.43631173636676474,1.7490850098084028,0.24998302996182778 +85,33,100000,9,2,7,6,1.5944636678200692,-0.0012698283389849059,9.245938002317867,0.00013707545367692975,-1.087517218247353,1.747506822047324,-0.6211305862929063 +130,33,100000,11,3,9,7,1.3633136094674556,-0.0027950318083522926,10.846578716441083,0.000257825035169499,-5.584045289996328,1.7480909131050837,-3.1960680683489846 +145,33,100000,12,1,9,8,1.9177170035671818,-0.000745983482634589,11.305691533221907,6.610729982963175e-05,-1.2652248004832458,1.748977131936978,-0.7247711608817241 +170,33,100000,13,1,11,7,1.5944636678200692,0.0015822287874653629,11.95750624050102,-0.00013211953701281615,4.1795945238819305,1.7426985533574184,2.3946952801318178 +65,34,100000,8,1,7,4,1.3633136094674556,0.0005914775703375025,8.376245243346276,-7.082748091737957e-05,0.38311284621809727,1.750680424243482,0.2194990974914581 +85,34,100000,9,2,7,6,1.5944636678200692,0.0003185098683994949,9.258119587394342,-3.436392149027377e-05,0.2727809385188611,1.7498091739578767,0.15571338361486303 +130,34,100000,11,3,9,7,1.3633136094674556,0.0048343732720050854,10.835292475404783,-0.0004459308109784764,9.658337060406568,1.7462719639309292,5.5278775574462955 +145,34,100000,12,1,9,8,1.9177170035671818,0.0032731416772931446,11.296287098277796,-0.0002898277471685565,5.551409812695762,1.7475222769546261,3.1775430748562106 +170,34,100000,13,1,11,7,1.5944636678200692,0.005443590063838337,11.977959904360372,-0.00045432894856593277,14.379715121682349,1.7456794901599284,8.234810788449494 +65,35,100000,8,1,7,4,1.3633136094674556,-0.00020963394548363792,8.387150028142218,2.5006398430284585e-05,-0.13578445159355473,1.7529595830692108,-0.07749650017006923 +85,35,100000,9,2,7,6,1.5944636678200692,-0.0010123349938018613,9.246266860005624,0.00010926843966822808,-0.8669925710383266,1.7475689770231297,-0.49512854543891477 +130,35,100000,11,3,9,7,1.3633136094674556,0.000640871554713804,10.837245709713052,-5.9123084648400603e-05,1.280363170071365,1.746586757308151,0.7329055645151777 +145,35,100000,12,1,9,8,1.9177170035671818,0.001228864883281127,11.297198606645233,-0.00010872253078822187,2.0842154859504127,1.7476632862228814,1.191985681709207 +170,35,100000,13,1,11,7,1.5944636678200692,0.001094485117312395,11.991789660648328,-9.129054376417773e-05,2.891177331008649,1.747695052250515,1.6546609170416424 +65,36,100000,8,1,7,4,1.3633136094674556,-0.0007223137060434829,8.380498304236724,8.618553033430502e-05,-0.4678582479919864,1.7515693369039531,-0.26709471917079924 +85,36,100000,9,2,7,6,1.5944636678200692,0.0017576103621718333,9.278209182992704,-0.00018967142215542063,1.5052676595324865,1.7536061608456872,0.859458921974983 +130,36,100000,11,3,9,7,1.3633136094674556,-0.0013878730282590236,10.832082702233206,0.00012797743430487552,-2.772757656425897,1.7457546602298224,-1.58644249183227 +145,36,100000,12,1,9,8,1.9177170035671818,-0.0003798180335495374,11.279663805923473,3.35069824903755e-05,-0.6441901287418269,1.7449506732539786,-0.36735571804897194 +170,36,100000,13,1,11,7,1.5944636678200692,0.0023382393539665516,11.992902701620748,-0.00019509209786328,6.176661982632372,1.7478572679210278,3.5360866114667986 +65,37,100000,8,1,7,4,1.3633136094674556,0.0014341907300737817,8.382341911451528,-0.00017111557792378294,0.9289564307648257,1.7519546607533847,0.5302986133985639 +85,37,100000,9,2,7,6,1.5944636678200692,0.0009872572946868037,9.26905649949272,-0.00010659635419381624,0.8455153140388072,1.7518762793720872,0.4830205131630711 +130,37,100000,11,3,9,7,1.3633136094674556,0.002695389296852952,10.84378814777974,-0.00024860327443476313,5.384974819542788,1.747641170578263,3.0817526567410023 +145,37,100000,12,1,9,8,1.9177170035671818,0.001636943308831095,11.285267557615501,-0.0001449790089242363,2.776336634162061,1.7458175670245728,1.58948565245137 +170,37,100000,13,1,11,7,1.5944636678200692,-0.0010861275674502499,11.978453276105416,9.063604058434215e-05,-2.869100138434717,1.745751394636419,-1.6427979048708423 +65,38,100000,8,1,7,4,1.3633136094674556,-0.0010767855501819183,8.381150472538119,0.00012840792941634302,-0.6974573467956205,1.7517056435957217,-0.3979447560829181 +85,38,100000,9,2,7,6,1.5944636678200692,0.00386476697345085,9.256394278568877,-0.0004173506909014588,3.309896699502994,1.7494830860107282,1.891142960871351 +130,38,100000,11,3,9,7,1.3633136094674556,0.0007688101072127606,10.85617237436514,-7.086272363599887e-05,1.5359647948385273,1.7496370768013891,0.8784332681283697 +145,38,100000,12,1,9,8,1.9177170035671818,0.0005890915436857743,11.308906361856932,-5.214506878082909e-05,0.9991283294824554,1.7494744621311755,0.5716954425901163 +170,38,100000,13,1,11,7,1.5944636678200692,0.0011909778246582147,11.981197741222106,-9.945133997158514e-05,3.1460711835362556,1.7461513756435285,1.802577119307023 +65,39,100000,8,1,7,4,1.3633136094674556,-0.0007644114317824748,8.383647766646044,9.12273588251876e-05,-0.4951258576799939,1.7522275915307821,-0.28271968266126113 +85,39,100000,9,2,7,6,1.5944636678200692,-0.0008304920275745238,9.270673771087306,8.978790112381015e-05,-0.7112570667043411,1.7521819479958587,-0.40685629827266423 +130,39,100000,11,3,9,7,1.3633136094674556,0.00048110236088857506,10.850412181208696,-4.4344318010478175e-05,0.9611688011199007,1.7487087341803886,0.5497040220040222 +145,39,100000,12,1,9,8,1.9177170035671818,0.006883423382003692,11.286561609826089,-0.0006095870024374235,11.674625749593664,1.7460177553737066,6.683241949884415 +170,39,100000,13,1,11,7,1.5944636678200692,0.000606400324750426,12.001877967088266,-5.0475206665976345e-05,1.6018590337161265,1.7491653318125826,0.9148740746417122 +65,40,100000,8,1,7,4,1.3633136094674556,0.0015552059838925842,8.379249955202143,-0.0001856533998167171,1.0073406344124332,1.751308425224081,0.5753522951568204 +85,40,100000,9,2,7,6,1.5944636678200692,0.0018696130255184931,9.253828160734226,-0.00020199309618389085,1.6011899359060193,1.7489980829292555,0.9152921759100883 +130,40,100000,11,3,9,7,1.3633136094674556,-0.0007778667766298851,10.848104444010687,7.177632419182612e-05,-1.554058632644102,1.7483368072778014,-0.8897585048796639 +145,40,100000,12,1,9,8,1.9177170035671818,-0.0016363200571034378,11.302722375979048,0.0001449673296430292,-2.7752795684747733,1.7485178068170923,-1.5893576059841787 +170,40,100000,13,1,11,7,1.5944636678200692,0.005924416383937985,11.954667401922256,-0.0004945345817763177,15.649859534644358,1.7422848182704427,8.96354661556854 +65,41,100000,8,1,7,4,1.3633136094674556,0.002166452307989972,8.382735654800852,-0.000258567988569167,1.4032581310500094,1.7520369552366304,0.8013194793320289 +85,41,100000,9,2,7,6,1.5944636678200692,0.0007023349448313341,9.276511350428502,-7.557358626275601e-05,0.6014996846671884,1.753285265984842,0.3424469128825762 +130,41,100000,11,3,9,7,1.3633136094674556,0.0029596484279248735,10.833713582452008,-0.0002730154694925457,5.912924072854002,1.7460175013491634,3.3843727535488703 +145,41,100000,12,1,9,8,1.9177170035671818,-0.0016783263789452954,11.28441790281038,0.0001485724176878804,-2.8465243633108446,1.7456861264293797,-1.628882194858348 +170,41,100000,13,1,11,7,1.5944636678200692,0.0016685551775443546,11.995768259272172,-0.00013918922553299903,4.407633167913079,1.7482748970715596,2.5228349187807315 +65,42,100000,8,1,7,4,1.3633136094674556,0.002109156224484272,8.384223874728873,-0.0002515797247433678,1.3661462155187183,1.7523480012267205,0.7796623826383818 +85,42,100000,9,2,7,6,1.5944636678200692,0.002959339671102261,9.257785289529311,-0.00031959419967504503,2.534462925546996,1.7497459907741273,1.4481785563725824 +130,42,100000,11,3,9,7,1.3633136094674556,0.00397511596164332,10.842722962306022,-0.0003666491101603081,7.941672612265961,1.747469499759652,4.5450803972606595 +145,42,100000,12,1,9,8,1.9177170035671818,0.003942144320913968,11.293167360813047,-0.00034905389832163083,6.686071311243363,1.7470396572521996,3.826872368843338 +170,42,100000,13,1,11,7,1.5944636678200692,-0.0009816975079312465,11.989115369373346,8.1976269937333e-05,-2.5932390819603883,1.7473052984471358,-1.4858376826032964 +65,43,100000,8,1,7,4,1.3633136094674556,0.002335774468256667,8.38528248749868,-0.00027871209475372437,1.5129317653529217,1.752569257004114,0.8637474108356252 +85,43,100000,9,2,7,6,1.5944636678200692,0.003207868775892356,9.247311445768311,-0.00034674089230199,2.7473103415299223,1.747766406504709,1.5711884801407612 +130,43,100000,11,3,9,7,1.3633136094674556,0.0038622529615151766,10.835701002244493,-0.00035626682838307746,7.716189631214684,1.7463378042364233,4.416378856531717 +145,43,100000,12,1,9,8,1.9177170035671818,0.003809334977279501,11.284568335000122,-0.0003373644447740298,6.460820110360489,1.7457093981115226,3.6987143766155226 +170,43,100000,13,1,11,7,1.5944636678200692,0.002233166418213396,11.97953182194794,-0.0001863887525893164,5.899102712847124,1.7459085829532546,3.3783365896294044 +65,44,100000,8,1,7,4,1.3633136094674556,-0.0012206429449193423,8.387736040842734,0.00014578394593467436,-0.7906369003599705,1.753082062883656,-0.4517941926909977 +85,44,100000,9,2,7,6,1.5944636678200692,0.0006148616221901196,9.249584311342785,-6.645148182213637e-05,0.526585035506285,1.7481959841306884,0.30111188223017854 +130,44,100000,11,3,9,7,1.3633136094674556,0.0004359056479811354,10.830397621644641,-4.0242143411547623e-05,0.8708726939056911,1.7454830838976232,0.49885236891372037 +145,44,100000,12,1,9,8,1.9177170035671818,-0.0002624377026087668,11.304064282585749,2.3284106939006413e-05,-0.44510729480200234,1.7487253981848048,-0.2552766375236762 +170,44,100000,13,1,11,7,1.5944636678200692,0.0004194255042795612,12.004635345152074,-3.491514889482437e-05,1.10794883442332,1.7495671947651257,0.6328446507909344 +65,45,100000,8,1,7,4,1.3633136094674556,-0.00203493877776154,8.371492567678072,0.0002426598664220913,-1.31807396615724,1.7496870894003178,-0.7520191454949381 +85,45,100000,9,2,7,6,1.5944636678200692,-0.00021855329918970816,9.249195217826053,2.3467863763001334e-05,-0.1871752808443174,1.7481224444233343,-0.10634003088919458 +130,45,100000,11,3,9,7,1.3633136094674556,-2.7914330995856287e-05,10.832375342226262,2.5132375372485458e-06,-0.055768556212853995,1.7458018236097275,-0.031154764453713422 +145,45,100000,12,1,9,8,1.9177170035671818,-0.00012002190184670518,11.304229871671922,1.0598398591570891e-05,-0.20356306855657483,1.7487510146209304,-0.11619614884432125 +170,45,100000,13,1,11,7,1.5944636678200692,-0.0010895067694002317,11.979197753779216,9.094972707405884e-05,-2.8780265933678626,1.745859895534436,-1.648483540571282 +65,46,100000,8,1,7,4,1.3633136094674556,0.0012383585659800933,8.38686646900871,-0.00014787960339028051,0.8021116922159538,1.7529003176812326,0.4582887752202476 +85,46,100000,9,2,7,6,1.5944636678200692,-0.0015517243489763116,9.257941332296058,0.0001677568839737291,-1.3289410038166285,1.7497754832711947,-0.7601574818994048 +130,46,100000,11,3,9,7,1.3633136094674556,0.0020402365066669224,10.847448500979787,-0.00018816057156755862,4.076079929211316,1.7482310920949953,2.3324887519709385 +145,46,100000,12,1,9,8,1.9177170035671818,0.0012991679912329275,11.291456689552557,-0.00011503322612358736,2.20345302646207,1.746775018427934,1.2611733507861638 +170,46,100000,13,1,11,7,1.5944636678200692,-0.0007184913215473697,11.992830438091413,5.9966972511944945e-05,-1.8979571202257737,1.7478467361641965,-1.086914390444912 +65,47,100000,8,1,7,4,1.3633136094674556,0.0017572489189088207,8.372713211340045,-0.00020986700656202423,1.1382082239444593,1.7499422105079154,0.6503918809047281 +85,47,100000,9,2,7,6,1.5944636678200692,0.004506606392053246,9.259986191663042,-0.00048678268746211745,3.8595862895447177,1.7501619671188087,2.2057604622137323 +130,47,100000,11,3,9,7,1.3633136094674556,0.003162904537420622,10.82960696972939,-0.0002917629934536168,6.318998636120531,1.7453556583319576,3.6167720729291446 +145,47,100000,12,1,9,8,1.9177170035671818,0.0007388664569981543,11.265074210597422,-6.559444300444431e-05,1.2531539737819757,1.7426936800824866,0.7191484257599575 +170,47,100000,13,1,11,7,1.5944636678200692,-0.0022661149827818724,11.981343384409884,0.0001890802174918365,-5.986139202848534,1.7461726018229293,-3.4271199750728463 +65,48,100000,8,1,7,4,1.3633136094674556,0.002151533826675242,8.387095342678576,-0.00025661135625616206,1.3935951072527137,1.7529481535124216,0.7952557450121793 +85,48,100000,9,2,7,6,1.5944636678200692,0.002356174844677348,9.25021063058667,-0.00025452277578110003,2.0178953596485742,1.7483143601300943,1.1533201365024552 +130,48,100000,11,3,9,7,1.3633136094674556,0.00035201569227646685,10.84107219938283,-3.247519529488499e-05,0.7032734162764288,1.7472034542404926,0.40257120347969194 +145,48,100000,12,1,9,8,1.9177170035671818,0.0029200175652352766,11.29020793284901,-0.00025863542052872654,4.952493892136312,1.7465818372402604,2.83556421854815 +170,48,100000,13,1,11,7,1.5944636678200692,4.3821190252830586e-05,11.980416770764423,-3.6612407244510786e-06,0.11575747342084589,1.7460375562518056,0.06636078267076356 +65,49,100000,8,1,7,4,1.3633136094674556,-0.0036379383087282694,8.374032647418792,0.00043399553995678193,-2.356371517228383,1.750217979763351,-1.3449811867085122 +85,49,100000,9,2,7,6,1.5944636678200692,-0.0019569037023793633,9.273593479448719,0.00021163977878276702,-1.6759481620096741,1.7527337806253525,-0.9590042298022723 +130,49,100000,11,3,9,7,1.3633136094674556,-0.0011951357006589156,10.834845433536207,0.00011022247534813769,-2.3876980076677934,1.7461999163435133,-1.3663472736189932 +145,49,100000,12,1,9,8,1.9177170035671818,-0.0016695066376692896,11.287370492869858,0.0001478472294449305,-2.8315656468566437,1.7461428886255566,-1.6209315520994527 +170,49,100000,13,1,11,7,1.5944636678200692,-0.001975226348584713,11.978934359048292,0.00016484180017211757,-5.217731655102182,1.7458215081309665,-2.987793401079738 +65,50,100000,8,1,7,4,1.3633136094674556,0.001264205754040064,8.375891643383914,-0.0001507882005724378,0.8188534763190084,1.7506065199445824,0.4673027122991966 +85,50,100000,9,2,7,6,1.5944636678200692,0.0017393625489839368,9.247386976766578,-0.00018792525966895846,1.4896397117005282,1.7477806820638477,0.8515465284728233 +130,50,100000,11,3,9,7,1.3633136094674556,-0.0007910016677717436,10.853144901762825,7.300784444314295e-05,-1.5803001325784256,1.749149153606054,-0.9050247591756101 +145,50,100000,12,1,9,8,1.9177170035671818,-0.0001488561854886934,11.295134097641133,1.3295926239901591e-05,-0.2524674365717605,1.747343909117444,-0.1457706474281349 +170,50,100000,13,1,11,7,1.5944636678200692,0.0008488899393374026,11.990888763599248,-7.089442239436444e-05,2.2424163748889843,1.7475637546410823,1.2849767909721597 +65,51,100000,8,1,7,4,1.3633136094674556,0.005780835052762668,8.381316542596323,-0.0006899183275900431,3.7443721987927887,1.7517403531334093,2.1381030115342035 +85,51,100000,9,2,7,6,1.5944636678200692,0.0022332384446218643,9.253412736559664,-0.00024132456538460915,1.9126091192134622,1.7489195666576876,1.0935150295946148 +130,51,100000,11,3,9,7,1.3633136094674556,0.0009842495816414826,10.851625739290363,-9.073404308365413e-05,1.9663798544697046,1.7489043174984602,1.124763456819551 +145,51,100000,12,1,9,8,1.9177170035671818,-0.0018277785231109668,11.31423774863118,0.00016199849502415622,-3.100002575209041,1.7502992213705613,-1.7760797612720152 +170,51,100000,13,1,11,7,1.5944636678200692,-0.002143319421473097,11.96898314210511,0.0001787702735954735,-5.661764081077846,1.7443712081250764,-3.240250004550248 +65,52,100000,8,1,7,4,1.3633136094674556,-0.0004727126735456714,8.38781640659982,5.646758646591157e-05,-0.3061862476071744,1.7530988597602541,-0.1749968247670248 +85,52,100000,9,2,7,6,1.5944636678200692,0.003984029753084246,9.265554764366154,-0.00043025439313474755,3.4120367465986825,1.7512144421392246,1.9496135616865913 +130,52,100000,11,3,9,7,1.3633136094674556,-0.0023198110200960873,10.839286128433994,0.00021394362684957428,-4.63462696980384,1.7469156017777534,-2.6521023986331125 +145,52,100000,12,1,9,8,1.9177170035671818,-0.0016582556110631389,11.28233101647191,0.0001468058908976064,-2.812483350499726,1.745363287576735,-1.6095147774049783 +170,52,100000,13,1,11,7,1.5944636678200692,-0.0013068556451236325,11.990270934995781,0.00010912807811084071,-3.4521724930899067,1.747473711701373,-1.9779700980676058 +65,53,100000,8,1,7,4,1.3633136094674556,0.0001981772450183263,8.376512282635673,-2.3714896799215818e-05,0.12836369830779748,1.7507362368949586,0.07349405029105935 +85,53,100000,9,2,7,6,1.5944636678200692,0.0019192556946728322,9.269017666356227,-0.00020719926267395543,1.6437053340961856,1.7518689398062233,0.9388829002708025 +130,53,100000,11,3,9,7,1.3633136094674556,-0.0003704936386942795,10.859674203510739,3.4226279134970394e-05,-0.7401895219732788,1.7502014497588627,-0.42427810693311174 +145,53,100000,12,1,9,8,1.9177170035671818,-0.0008960863702347681,11.303669430426934,7.939891312705883e-05,-1.5198067053602509,1.748664315022025,-0.8704945231184787 +170,53,100000,13,1,11,7,1.5944636678200692,0.000840052349306888,11.990498415007592,-7.0017558800331e-05,2.219071114590046,1.7475068648588565,1.2690834480387252 +65,54,100000,8,1,7,4,1.3633136094674556,-8.311452471619608e-05,8.388805459333813,9.955742916340285e-06,-0.053835079676676154,1.7533055771150645,-0.030853512742360555 +85,54,100000,9,2,7,6,1.5944636678200692,-0.0025555982107536325,9.24768244409579,0.0002758665056198373,-2.1886872199894563,1.7478365261732676,-1.2500350703056875 +130,54,100000,11,3,9,7,1.3633136094674556,-0.00041976461901226396,10.818369576942828,3.862063859724589e-05,-0.8386253912023794,1.7435445817952238,-0.47875176170830724 +145,54,100000,12,1,9,8,1.9177170035671818,0.0019652446803975756,11.28683225624211,-0.00017404569898187873,3.3331519618575167,1.746059624054722,1.9081599705729506 +170,54,100000,13,1,11,7,1.5944636678200692,0.0023321127752179874,11.980709474823495,-0.00019466415932717362,6.160478093683764,1.7460802152251773,3.5283301326312646 +65,55,100000,8,1,7,4,1.3633136094674556,-0.0006938781825899756,8.379108394647895,8.275372396615056e-05,-0.4494399429364651,1.7512788383048865,-0.25645932185299763 +85,55,100000,9,2,7,6,1.5944636678200692,-0.0018463714485100582,9.270674981807723,0.00019955832212704624,-1.5812851862639536,1.7521821768252308,-0.9042594738700646 +130,55,100000,11,3,9,7,1.3633136094674556,-0.00010481838659845884,10.845145747953145,9.677749200087855e-06,-0.20941107583859178,1.7478599684673302,-0.11996796653806825 +145,55,100000,12,1,9,8,1.9177170035671818,0.002994835472252673,11.291155933599,-0.0002652418169641381,5.079388754666436,1.7467284918370116,2.9079938235400014 +170,55,100000,13,1,11,7,1.5944636678200692,-0.0005502627862564739,11.96327553926182,4.5885423720119604e-05,-1.453566858569067,1.743539376552666,-0.8316832627014126 +65,56,100000,8,1,7,4,1.3633136094674556,-0.0024678951055364215,8.378003041631224,0.00029428415578720314,-1.598509166645608,1.7510478135638543,-0.912006268819261 +85,56,100000,9,2,7,6,1.5944636678200692,0.00018432515722179664,9.24880139361916,-1.992724170201722e-05,0.15786132351960133,1.7480480106029845,0.09029639508431966 +130,56,100000,11,3,9,7,1.3633136094674556,-0.005124203387337403,10.831656326699635,0.00047259656052168336,-10.237373222207747,1.7456859433362015,-5.8584333181683155 +145,56,100000,12,1,9,8,1.9177170035671818,-0.0018512368441075963,11.30216898752275,0.00016401558314179873,-3.1397890452764634,1.7484321982762703,-1.798194222161994 +170,56,100000,13,1,11,7,1.5944636678200692,-0.00027365658187502315,11.973805467323896,2.2809404304396756e-05,-0.7228875874906509,1.7450740184781357,-0.4134254029747226 +65,57,100000,8,1,7,4,1.3633136094674556,0.0007370383315797343,8.374921299448225,-8.799690849412879e-05,0.47739570719854607,1.7504037128295038,0.2727083011611125 +85,57,100000,9,2,7,6,1.5944636678200692,0.00023765675599699657,9.242449926001473,-2.570200301618697e-05,0.20353602628379816,1.7468475663658352,0.1164635955900039 +130,57,100000,11,3,9,7,1.3633136094674556,0.0016515402299328368,10.85902844084208,-0.00015226733401493657,3.299524325496875,1.7500973752960651,1.887546582812762 +145,57,100000,12,1,9,8,1.9177170035671818,0.002654815628856224,11.288802551992955,-0.0002351286981032855,4.502698320446265,1.7463644264811151,2.5778469234125416 +170,57,100000,13,1,11,7,1.5944636678200692,0.0034786036525440906,11.992323515587495,-0.00029029535223089233,9.189033148752038,1.7477728567869693,5.261666257308237 +65,58,100000,8,1,7,4,1.3633136094674556,-0.0004800857183348522,8.389966089613075,5.7489104037976996e-05,-0.3109619285731741,1.7535481551020573,-0.1781625760013738 +85,58,100000,9,2,7,6,1.5944636678200692,-0.0014387550005114766,9.26616949073416,0.0001555575042233824,-1.2321908307279543,1.7513306270543207,-0.7048783805469359 +130,58,100000,11,3,9,7,1.3633136094674556,-0.001846028345789821,10.835075284881821,0.00017025683060827197,-3.6880817809312307,1.7462369603791617,-2.110549192275545 +145,58,100000,12,1,9,8,1.9177170035671818,0.0003998931563166066,11.28368258772166,-3.5464109403815676e-05,0.678238527652669,1.7455723740533167,0.38881279084883674 +170,58,100000,13,1,11,7,1.5944636678200692,0.0016896553329875316,11.976364273794912,-0.00014103986585130377,4.463371057933798,1.7454469414142124,2.5563781761646576 +65,59,100000,8,1,7,4,1.3633136094674556,0.0002737169322121304,8.378024791096573,-3.270721941823172e-05,0.1772923914900757,1.751052359319395,0.10136185913673136 +85,59,100000,9,2,7,6,1.5944636678200692,0.00039200055801309145,9.255293015297614,-4.2250279881916875e-05,0.335720461824466,1.7492749443296007,0.19144887293932178 +130,59,100000,11,3,9,7,1.3633136094674556,0.001892384747169315,10.842879098343984,-0.00017453993657139035,3.7806947680216862,1.7474946634537813,2.1636437189303295 +145,59,100000,12,1,9,8,1.9177170035671818,0.004180893852491741,11.308836065104753,-0.00037013249691665497,7.09100229897667,1.7494635873066104,4.057968789554016 +170,59,100000,13,1,11,7,1.5944636678200692,0.0035604659701404867,11.99373191671422,-0.0002970765979069248,9.405279558278114,1.7479781185327483,5.384577806810821 +65,60,100000,8,1,7,4,1.3633136094674556,0.00019434148889939493,8.369840457482127,-2.3027789217089367e-05,0.1258791959059841,1.7493417894604633,0.07136465796758783 +85,60,100000,9,2,7,6,1.5944636678200692,0.0018110238424039443,9.252320447226678,-0.0001956601638269228,1.551012487912495,1.748713121074712,0.886595732584007 +130,60,100000,11,3,9,7,1.3633136094674556,-0.0032964553602832306,10.838889155413627,0.0003040505345219685,-6.585812717145504,1.7468516235457419,-3.7690917172230654 +145,60,100000,12,1,9,8,1.9177170035671818,-0.001896796848402888,11.304261028096237,0.00016798313138864564,-3.217061060926121,1.7487558344829863,-1.8416926641817444 +170,60,100000,13,1,11,7,1.5944636678200692,0.0022835577232354805,11.983154173943767,-0.00019056981063027972,6.032215714070517,1.746436508045319,3.45411917396953 +65,61,100000,8,1,7,4,1.3633136094674556,3.150676491884228e-05,8.376887272201493,-3.956231474432775e-06,0.020407614740647808,1.750814611736323,0.012260625774877874 +85,61,100000,9,2,7,6,1.5944636678200692,-0.0006458783074940871,9.270791383884406,6.987742768237853e-05,-0.5531486097197797,1.7522041771266663,-0.31663588527885944 +130,61,100000,11,3,9,7,1.3633136094674556,-0.0023349574450730495,10.862167570677597,0.00021545513492772592,-4.6648872061275,1.7506032937505367,-2.6708394568883596 +145,61,100000,12,1,9,8,1.9177170035671818,0.004351519199089928,11.270998698228167,-0.00038545801310312013,7.380391307088021,1.743610191324118,4.225990962388206 +170,61,100000,13,1,11,7,1.5944636678200692,0.0003183054740344949,11.982703810059135,-2.6538640876142515e-05,0.8408315072609819,1.746370871576105,0.48101862513374544 +65,62,100000,8,1,7,4,1.3633136094674556,-0.0016995840920333157,8.374873979556755,0.00020282612293023514,-1.1008574653377678,1.7503938227170166,-0.6285717119151959 +85,62,100000,9,2,7,6,1.5944636678200692,-0.0010761243396308216,9.278294680471864,0.00011641334773737806,-0.9216235867433195,1.753622320096167,-0.5275042977633221 +130,62,100000,11,3,9,7,1.3633136094674556,-0.0016197683928016095,10.837603232176344,0.00014938388147818418,-3.2360490630841197,1.7466443774836597,-1.8518025342441053 +145,62,100000,12,1,9,8,1.9177170035671818,-0.0006184248636543432,11.28464227190334,5.4648204355967935e-05,-1.0488790877347305,1.7457208360631555,-0.5991387125665513 +170,62,100000,13,1,11,7,1.5944636678200692,0.003242749363244446,11.984573253687849,-0.0002706529316955841,8.566003594619092,1.7466433261031458,4.905643122427708 +65,63,100000,8,1,7,4,1.3633136094674556,0.0028450208094861124,8.38390059316074,-0.00033965585214873126,1.8427816616105939,1.752280433635705,1.0526161885004246 +85,63,100000,9,2,7,6,1.5944636678200692,0.004133352757411845,9.250579124458834,-0.00044659024715377766,3.5399212277534366,1.7483840064499514,2.0236362864871236 +130,63,100000,11,3,9,7,1.3633136094674556,0.00397662915818639,10.844350822007023,-0.00036678813550997504,7.944695747102537,1.7477318540766698,4.546803792665103 +145,63,100000,12,1,9,8,1.9177170035671818,0.006268085068640736,11.284498856258512,-0.0005550997079638315,10.630981603472936,1.7456986498322267,6.085867382012133 +170,63,100000,13,1,11,7,1.5944636678200692,-0.0006123030983899645,11.991363643799474,5.1163841870991225e-05,-1.617451722064979,1.7476329641419017,-0.9273557371760109 +65,64,100000,8,1,7,4,1.3633136094674556,-0.002591299045127773,8.382417298051083,0.0003092456786318188,-1.678440573857536,1.7519704169592094,-0.9583730281470678 +85,64,100000,9,2,7,6,1.5944636678200692,-0.0016677903164715416,9.253453517467237,0.00018017240826629678,-1.4283432097907862,1.7489272743574553,-0.8164159999354044 +130,64,100000,11,3,9,7,1.3633136094674556,0.001301395446020262,10.850441870278766,-0.00012000353267926922,2.599988697465356,1.7487135190249894,1.4875958753700556 +145,64,100000,12,1,9,8,1.9177170035671818,0.0031744790028597147,11.299952258355155,-0.0002810796798822686,5.384073047899957,1.7480892728912616,3.0816331390564673 +170,64,100000,13,1,11,7,1.5944636678200692,-0.0007546138948642987,11.987326063510444,6.300356801274519e-05,-1.9933780295279089,1.747044523275785,-1.1419533428803148 +65,65,100000,8,1,7,4,1.3633136094674556,0.003993611229984655,8.3838692295412,-0.0004765485982975697,2.5867485797220398,1.7522738784700944,1.4768559587648533 +85,65,100000,9,2,7,6,1.5944636678200692,5.955893359461624e-05,9.263455726656163,-6.459781403104006e-06,0.051007969972046575,1.750817718440988,0.029271234948385943 +130,65,100000,11,3,9,7,1.3633136094674556,0.00036276775067696764,10.8436324935408,-3.345399786988928e-05,0.7247543814982437,1.7476160845333644,0.4147047018931891 +145,65,100000,12,1,9,8,1.9177170035671818,-0.0013750138400277293,11.302325245228,0.00012182941037598184,-2.332091328975118,1.7484563711587844,-1.3356837053592328 +170,65,100000,13,1,11,7,1.5944636678200692,-0.002026247518535355,11.978677176829407,0.00016907412426780694,-5.35250849914467,1.7457840261450253,-3.0645051937872188 +65,66,100000,8,1,7,4,1.3633136094674556,-0.001994338148313205,8.377266019325225,0.00023814654568097247,-1.2917760581954514,1.7508937719275535,-0.7380320628465987 +85,66,100000,9,2,7,6,1.5944636678200692,-0.0005224250641493824,9.263254396038263,5.648868134532602e-05,-0.44741972994602114,1.7507796664198543,-0.25596740205311275 +130,66,100000,11,3,9,7,1.3633136094674556,-1.2858474052322771e-05,10.85600047139535,1.236132206830498e-06,-0.025689260942880415,1.7496093720267056,-0.015323425329551152 +145,66,100000,12,1,9,8,1.9177170035671818,0.0021482433050607304,11.2829945557168,-0.000190346792764382,3.6435266601825234,1.745465936314501,2.0868779441527914 +170,66,100000,13,1,11,7,1.5944636678200692,-0.0002881452320734673,11.975583778949272,2.4029364761801557e-05,-0.7611606131792217,1.7453331913386494,-0.43553745101354774 +65,67,100000,8,1,7,4,1.3633136094674556,0.0026994333557460335,8.373648483099872,-0.00032221193636426324,1.7484815113205656,1.7501376873491146,0.9985563275281816 +85,67,100000,9,2,7,6,1.5944636678200692,0.001322935030551795,9.263538483761915,-0.00014273948019618166,1.1329993040616542,1.7508333597536205,0.646796013751372 +130,67,100000,11,3,9,7,1.3633136094674556,0.0022209874635410703,10.850722897620564,-0.0002048279115263365,4.437192645846346,1.7487588108497547,2.539101554298479 +145,67,100000,12,1,9,8,1.9177170035671818,0.00015309909199279852,11.3035490511486,-1.3576471641365238e-05,0.2596636153881688,1.7486456924897944,0.14884642297520537 +170,67,100000,13,1,11,7,1.5944636678200692,0.0011851407806953694,11.968960968778623,-9.898154055029262e-05,3.1306521258272575,1.7443679765629752,1.7940619028430969 +65,68,100000,8,1,7,4,1.3633136094674556,0.004462014208112224,8.385244690945045,-0.0005325918837079304,2.8901433441677815,1.752561357320589,1.6505378462003255 +85,68,100000,9,2,7,6,1.5944636678200692,0.001053609848186318,9.263870149069955,-0.00011379616960404109,0.9023415339222637,1.7508960453771116,0.5156450673556378 +130,68,100000,11,3,9,7,1.3633136094674556,0.0004536202702456069,10.840857280417282,-4.184143544508877e-05,0.9062637949029639,1.7471688167847055,0.5186776205499914 +145,68,100000,12,1,9,8,1.9177170035671818,0.0015992580149456527,11.322919026571322,-0.0001413928938181633,2.7124205159807726,1.7516422048182063,1.5501690744761343 +170,68,100000,13,1,11,7,1.5944636678200692,-0.0006575133161643848,11.99129721090545,5.491741330764053e-05,-1.7368784321150343,1.7476232821475144,-0.9953900340424142 +65,69,100000,8,1,7,4,1.3633136094674556,-0.0014307346672076979,8.371061247974978,0.0001704860056699186,-0.9267178639150658,1.7495969412565064,-0.528347526903054 +85,69,100000,9,2,7,6,1.5944636678200692,0.004290170199217174,9.245197561621296,-0.000463437989287537,3.674224158983596,1.7473668767904713,2.0999785320792306 +130,69,100000,11,3,9,7,1.3633136094674556,0.003103365511159908,10.835075790402426,-0.0002862734636810663,6.200048784398414,1.7462370418514856,3.5487223941818287 +145,69,100000,12,1,9,8,1.9177170035671818,-0.0012118507748406955,11.289171512051094,0.00010732574762171727,-2.0553587183971693,1.7464215041664906,-1.1766719696124104 +170,69,100000,13,1,11,7,1.5944636678200692,-0.0007809560929077453,11.962163293715472,6.511303553809016e-05,-2.0629632295708027,1.7433772768083202,-1.1801878995609434 +65,70,100000,8,1,7,4,1.3633136094674556,-0.002053964464040116,8.371051525505388,0.00024493210989790133,-1.3303973156585212,1.7495949092079341,-0.7590609799038585 +85,70,100000,9,2,7,6,1.5944636678200692,0.0013841608419167867,9.264392506147136,-0.00014932972617460582,1.1854348357129796,1.7509947722510848,0.6766584233848336 +130,70,100000,11,3,9,7,1.3633136094674556,0.0012280948107887151,10.846176545409575,-0.0001132523323538739,2.453545259614194,1.748026097134622,1.403906191128035 +145,70,100000,12,1,9,8,1.9177170035671818,0.0016433609336685266,11.284589771901098,-0.0001455515993236678,2.78722124259312,1.7457127143747937,1.5957632800291899 +170,70,100000,13,1,11,7,1.5944636678200692,-1.4816599093964933e-05,11.993132320371943,1.2394934198675656e-06,-0.039139331129788006,1.747890732780463,-0.022466087222386924 +65,71,100000,8,1,7,4,1.3633136094674556,0.000853169042924676,8.379753681929515,-0.00010178006836000612,0.5526160867833642,1.7514137068264166,0.3154232348557004 +85,71,100000,9,2,7,6,1.5944636678200692,0.0022407402262482677,9.257652073239482,-0.00024210423197439275,1.9190338590273233,1.7497208125417807,1.0970479361291916 +130,71,100000,11,3,9,7,1.3633136094674556,0.0008049249332039363,10.855745117688299,-7.419471483252789e-05,1.6081166835477823,1.7495682178981464,0.919737521845412 +145,71,100000,12,1,9,8,1.9177170035671818,0.0038586757603511763,11.28416659053814,-0.00034177733581683325,6.5445045133945525,1.7456472487175803,3.7470953598379473 +170,71,100000,13,1,11,7,1.5944636678200692,-6.075552300480374e-05,11.967298687754415,5.002237104555218e-06,-0.16049098161919226,1.7441257141147775,-0.09066663307499054 +65,72,100000,8,1,7,4,1.3633136094674556,0.0034327420245795727,8.382728623250419,-0.00040967813024211583,2.223461435095045,1.7520354856046725,1.2696199086203417 +85,72,100000,9,2,7,6,1.5944636678200692,9.442688239181144e-05,9.254245612911097,-1.038435844077229e-05,0.08086987611932119,1.7490769824986423,0.047054687572251654 +130,72,100000,11,3,9,7,1.3633136094674556,-0.002717209646769292,10.8495860153746,0.0002506599150149044,-5.4285685352966855,1.7485755850072662,-3.107247323238145 +145,72,100000,12,1,9,8,1.9177170035671818,-0.0015913437289353652,11.287408654673841,0.0001408341152355965,-2.6989974963410224,1.7461487922115764,-1.5440428735420997 +170,72,100000,13,1,11,7,1.5944636678200692,0.00010411423594087297,11.953140372817979,-8.801250445357282e-06,0.27502678111028245,1.7420622675681945,0.15952457431568698 +65,73,100000,8,1,7,4,1.3633136094674556,0.0011944950002090642,8.376439267614211,-0.0001425598968505127,0.7737003096537635,1.7507209763617442,0.44180264908284433 +85,73,100000,9,2,7,6,1.5944636678200692,-0.002255574221008275,9.254216701470876,0.00024359184160179653,-1.9317381153599507,1.7490715181597065,-1.1037887479613524 +130,73,100000,11,3,9,7,1.3633136094674556,0.00032084222478642965,10.839168488620574,-2.9607554933240056e-05,0.640993604722794,1.7468966423349432,0.367023166861228 +145,73,100000,12,1,9,8,1.9177170035671818,0.002017915778442972,11.27663853048818,-0.0001787461140307688,3.422484743436493,1.7444826667159805,1.95969323967318 +170,73,100000,13,1,11,7,1.5944636678200692,0.004260215251265879,11.994250883145975,-0.0003555500842622435,11.253727953764049,1.7480537532036964,6.444422436559644 +65,74,100000,8,1,7,4,1.3633136094674556,-0.00046267841664484943,8.363870474464223,5.49994824641277e-05,-0.29968684185834116,1.7480940308169572,-0.17044707233701728 +85,74,100000,9,2,7,6,1.5944636678200692,-0.0017981955097543748,9.257478043348033,0.00019416113589095646,-1.5400259378336363,1.7496879204304048,-0.8798031809216892 +130,74,100000,11,3,9,7,1.3633136094674556,-0.0010156180822736094,10.83753066056493,9.367082987637998e-05,-2.0290493123576763,1.7466326814661617,-1.1611686510847608 +145,74,100000,12,1,9,8,1.9177170035671818,-0.0008750346229131761,11.311552129705928,7.757830716202067e-05,-1.4841019030089742,1.7498837592936454,-0.8505342055410023 +170,74,100000,13,1,11,7,1.5944636678200692,0.00010126215355527403,11.973190885544021,-8.445868592939915e-06,0.2674927582085721,1.7449844487336452,0.15308320111782436 +65,75,100000,8,1,7,4,1.3633136094674556,0.00034704085931136475,8.36519716933426,-4.145184876465022e-05,0.22478588881888695,1.7483713171989153,0.12846204997473684 +85,75,100000,9,2,7,6,1.5944636678200692,0.005103649502347301,9.24633711069503,-0.0005514144197689879,4.370911043093517,1.7475822545898798,2.4986265057251322 +130,75,100000,11,3,9,7,1.3633136094674556,0.0009984359192939708,10.840438725984198,-9.210112198180034e-05,1.9947219834265033,1.7471013603802263,1.1417101323447048 +145,75,100000,12,1,9,8,1.9177170035671818,0.0015774106301462219,11.294271224503232,-0.00013963472355220732,2.675366273202745,1.747210423661776,1.530893274254848 +170,75,100000,13,1,11,7,1.5944636678200692,0.0007701159338085431,11.974910460309335,-6.432791985065689e-05,2.034328009450953,1.745235061227223,1.165957507345207 +65,76,100000,8,1,7,4,1.3633136094674556,0.0005331519474674869,8.391903898531494,-6.342339477678413e-05,0.34533407571894786,1.7539531676155211,0.1965533396505785 +85,76,100000,9,2,7,6,1.5944636678200692,0.0006224674058575607,9.253546518245958,-6.72865835242599e-05,0.5330988456353131,1.7489448517514665,0.30489598212509283 +130,76,100000,11,3,9,7,1.3633136094674556,-0.001698809592155568,10.834074208996615,0.00015665168687028358,-3.393961268465541,1.7460756217945252,-1.9418961930130945 +145,76,100000,12,1,9,8,1.9177170035671818,-0.0013914996294931113,11.308212553450693,0.00012327919479023473,-2.360052041474384,1.7493671307898866,-1.3515784996656748 +170,76,100000,13,1,11,7,1.5944636678200692,0.00032731537930256603,11.981228817246677,-2.7337610389833837e-05,0.8646319531999354,1.7461559046934805,0.4955001209568819 +65,77,100000,8,1,7,4,1.3633136094674556,-0.0023748579959178375,8.380360074318869,0.000283390934890276,-1.5382470135946609,1.751540446105725,-0.8782474491537731 +85,77,100000,9,2,7,6,1.5944636678200692,-5.686464531549701e-05,9.236399968052162,5.8815240460280416e-06,-0.0487005046206224,1.7457041082562448,-0.02665097492666602 +130,77,100000,11,3,9,7,1.3633136094674556,-0.003126598967161853,10.839415215794618,0.00028837391226682694,-6.2464656695910294,1.7469364061666766,-3.5747601164291862 +145,77,100000,12,1,9,8,1.9177170035671818,-0.0018457764646040505,11.288111899209246,0.0001634648402944099,-3.1305279721712824,1.7462575833109062,-1.7921561214699673 +170,77,100000,13,1,11,7,1.5944636678200692,0.0012732251551475044,11.985311559063392,-0.00010620188648729784,3.3633346380001496,1.7467509274444304,1.9249322398666673 +65,78,100000,8,1,7,4,1.3633136094674556,-0.0009862668315248689,8.378232505701815,0.00011773836015818023,-0.6388264101720572,1.751095772791979,-0.3648790477948986 +85,78,100000,9,2,7,6,1.5944636678200692,0.0012520164509391494,9.265450398561184,-0.00013516327255479275,1.0722626091442522,1.751194716725088,0.6124659118407576 +130,78,100000,11,3,9,7,1.3633136094674556,0.0018412067265615917,10.829788408989671,-0.00016988592254380767,3.6784489244960756,1.7453849000247041,2.1059513167420536 +145,78,100000,12,1,9,8,1.9177170035671818,0.0009992387537937914,11.305574438913766,-8.830362954188615e-05,1.6947582383981021,1.748959017585758,0.9681218905942272 +170,78,100000,13,1,11,7,1.5944636678200692,0.0036878411629199595,11.989057710478924,-0.0003077547730656787,9.741752173640098,1.7472968951839574,5.578122048875553 +65,79,100000,8,1,7,4,1.3633136094674556,0.0010092971965223012,8.386010073721863,-0.00012023531474430679,0.6537436769055587,1.7527213264482229,0.3726172769544429 +85,79,100000,9,2,7,6,1.5944636678200692,0.0005309344718258745,9.251961674181256,-5.7361389676635274e-05,0.45470742945717635,1.7486453120169092,0.25992190902681506 +130,79,100000,11,3,9,7,1.3633136094674556,0.0037502224440901697,10.82380999544312,-0.0003459692694482456,7.492369823048798,1.7444213878732024,4.2887275628087425 +145,79,100000,12,1,9,8,1.9177170035671818,0.0017926980521041486,11.277039226288375,-0.0001588096891680874,3.040504365176687,1.7445446538831826,1.7411191059724398 +170,79,100000,13,1,11,7,1.5944636678200692,0.0002484150846666495,11.990353635879018,-2.067687724353201e-05,0.656209984136143,1.7474857646082818,0.3747728872085584 +65,80,100000,8,1,7,4,1.3633136094674556,0.00020674447199517965,8.38209488214292,-2.4696065002941664e-05,0.13391287696798893,1.7519030302957959,0.07653475613596103 +85,80,100000,9,2,7,6,1.5944636678200692,0.0010780197475434919,9.248554463253255,-0.00011653425776426453,0.9232468681565212,1.7480013401084513,0.5280521778824402 +130,80,100000,11,3,9,7,1.3633136094674556,-0.0009782580359391187,10.834706693306618,9.02200002924269e-05,-1.9544096641988449,1.746177556248135,-1.1183912449444464 +145,80,100000,12,1,9,8,1.9177170035671818,0.0015709774433647359,11.286024915556439,-0.0001391491658596332,2.6644552709465943,1.7459347294038488,1.5255698347341151 +170,80,100000,13,1,11,7,1.5944636678200692,0.003373920829521785,11.979676634157578,-0.0002816326970103457,8.912504395568734,1.7459296880250954,5.104653751519333 +65,81,100000,8,1,7,4,1.3633136094674556,0.003921581631286473,8.382662888504905,-0.00046801397628897824,2.540093446961111,1.7520217466883896,1.4504065947037226 +85,81,100000,9,2,7,6,1.5944636678200692,0.0034929835932235535,9.251613314762631,-0.00037737748289942,2.991490805538933,1.7485794711622096,1.710012193426783 +130,81,100000,11,3,9,7,1.3633136094674556,-0.0006680872335985209,10.83076722898566,6.157184660788087e-05,-1.3347359264157181,1.7455426517347397,-0.7632610724686135 +145,81,100000,12,1,9,8,1.9177170035671818,0.0023571939506306576,11.28766620910973,-0.00020878572150440783,3.997917266685476,1.7461886355787224,2.2890341935044503 +170,81,100000,13,1,11,7,1.5944636678200692,0.002594814170684973,11.979421252527368,-0.00021657882774556159,6.854426606445222,1.7458924684586936,3.925538253501964 +65,82,100000,8,1,7,4,1.3633136094674556,-0.003118530672723871,8.389538113023074,0.0003722912105872788,-2.0199399300364766,1.7534587056869095,-1.1537553456579068 +85,82,100000,9,2,7,6,1.5944636678200692,-0.0012910344307349706,9.284049619868268,0.00013972850460211746,-1.105678720240893,1.7547100189162503,-0.6331523672348879 +130,82,100000,11,3,9,7,1.3633136094674556,-0.0016632681335753247,10.839681003152693,0.00015340531654404067,-3.3229548799902684,1.746979241836579,-1.9016533184958098 +145,82,100000,12,1,9,8,1.9177170035671818,-0.0008628780849269502,11.290884353373041,7.628853610260142e-05,-1.4634838146648872,1.7466864786967014,-0.8363937267978677 +170,82,100000,13,1,11,7,1.5944636678200692,0.0022389251660436525,11.99118317261847,-0.00018682585832963117,5.914314944533485,1.7476066620969994,3.3862592260306257 +65,83,100000,8,1,7,4,1.3633136094674556,-0.00041467910466841753,8.37407449242798,4.950575561921307e-05,-0.26859664681120143,1.750226725595918,-0.1534216456423985 +85,83,100000,9,2,7,6,1.5944636678200692,-0.004569816716636388,9.253740864877447,0.0004935163188987627,-3.9137214149350705,1.7489815837806326,-2.236272594983917 +130,83,100000,11,3,9,7,1.3633136094674556,0.003148276090407682,10.86238626739573,-0.00029031613410319913,6.2897732404028615,1.750638540048534,3.598836417587444 +145,83,100000,12,1,9,8,1.9177170035671818,0.00019126144438263128,11.288092580845023,-1.691167779147105e-05,0.3243888483355165,1.7462545947827695,0.18541214626781738 +170,83,100000,13,1,11,7,1.5944636678200692,0.0016137413068920685,11.981009337759419,-0.00013468138993880888,4.262837576133921,1.7461239175402028,2.4411294203731027 +65,84,100000,8,1,7,4,1.3633136094674556,0.0076054129460483835,8.386211771334594,-0.0009076461609214652,4.926190859210365,1.7527634823369256,2.8128561200171407 +85,84,100000,9,2,7,6,1.5944636678200692,0.0018864122587957733,9.254985956801049,-0.00020383278756593189,1.6155772785739273,1.749216909458787,0.9236283772946071 +130,84,100000,11,3,9,7,1.3633136094674556,-0.0023413707652945558,10.850582983306678,0.00021599691802848871,-4.67770003726206,1.7487362615328588,-2.677555545057147 +145,84,100000,12,1,9,8,1.9177170035671818,0.00360504788681234,11.277220569810709,-0.0003192899896876551,6.114339123456084,1.7445727075119812,3.500554055001774 +170,84,100000,13,1,11,7,1.5944636678200692,-0.0003642185200913084,11.989123979543466,3.0409905483522702e-05,-0.9621147991553265,1.7473065533016774,-0.5511861362606987 +65,85,100000,8,1,7,4,1.3633136094674556,0.0007147121484342688,8.38579789220886,-8.520845040686092e-05,0.4629345543180317,1.7526769793678296,0.2640666831673562 +85,85,100000,9,2,7,6,1.5944636678200692,-3.7518390322232606e-05,9.270220418714526,4.1864767844623785e-06,-0.03213181988753663,1.7520962631941626,-0.018970200060497086 +130,85,100000,11,3,9,7,1.3633136094674556,0.0005353691469335438,10.84020396750163,-4.937889139489289e-05,1.0695855247192951,1.7470635254849214,0.6121139397263611 +145,85,100000,12,1,9,8,1.9177170035671818,6.857991539250264e-05,11.293257591732873,-5.990207190129625e-06,0.1163149208923434,1.747053615868964,0.06567397897510652 +170,85,100000,13,1,11,7,1.5944636678200692,-0.00029011432347345354,11.98225318484967,2.4218476443355584e-05,-0.766362138835691,1.7463051970211563,-0.4389651412815759 +65,86,100000,8,1,7,4,1.3633136094674556,0.0006337912974705911,8.382010553634784,-7.558410345609272e-05,0.41052036469221864,1.751885405182859,0.23424018867290192 +85,86,100000,9,2,7,6,1.5944636678200692,2.7310641854349318e-05,9.254702318832093,-2.9081186982866936e-06,0.02338961286825143,1.7491633011298522,0.013177570627148597 +130,86,100000,11,3,9,7,1.3633136094674556,-0.0021607493568879693,10.84843009707024,0.00019932844927511746,-4.316846138615417,1.748389291214821,-2.4709287498900303 +145,86,100000,12,1,9,8,1.9177170035671818,0.003939857827650534,11.296103415223476,-0.0003488218442253277,6.682193305831206,1.7474938614029913,3.8243282304925286 +170,86,100000,13,1,11,7,1.5944636678200692,-0.0023071328815055477,11.982283136151839,0.00019259789067380736,-6.094491538645212,1.7463095621529747,-3.490878564880005 +65,87,100000,8,1,7,4,1.3633136094674556,-0.0017334472706409696,8.38576095428581,0.0002070105358349377,-1.1227913803144038,1.7526692591427269,-0.6415394871941901 +85,87,100000,9,2,7,6,1.5944636678200692,0.0016654780272023551,9.251601558188526,-0.0001799774842840959,1.426362899290062,1.7485772491385005,0.8155327400657537 +130,87,100000,11,3,9,7,1.3633136094674556,0.0022450339809420776,10.848623748724853,-0.00020705359719416783,4.4852339031346,1.7484205011204126,2.5666917488987098 +145,87,100000,12,1,9,8,1.9177170035671818,0.0012132583489566342,11.300868103295137,-0.00010745839691104781,2.057746033560924,1.7482309530221694,1.1781262776792352 +170,87,100000,13,1,11,7,1.5944636678200692,0.0014365804150395269,11.986748597584983,-0.00011986967931104566,3.794851720169881,1.7469603628319037,2.1726639508979697 +65,88,100000,8,1,7,4,1.3633136094674556,0.00015530538831324447,8.3652020133237,-1.8582110373459998e-05,0.10059466720900839,1.7483723296188287,0.057587202080771595 +85,88,100000,9,2,7,6,1.5944636678200692,0.0010496506883248661,9.2481716315128,-0.00011358544436491144,0.8989507964604075,1.747928983893433,0.5146902071832556 +130,88,100000,11,3,9,7,1.3633136094674556,0.0005761219847632575,10.83669038119671,-5.315406511247067e-05,1.1510034504319724,1.7464972576826392,0.658912002464095 +145,88,100000,12,1,9,8,1.9177170035671818,0.000840265118950968,11.308555243240486,-7.426168727472579e-05,1.4251311084303564,1.7494201444957653,0.8141722538032511 +170,88,100000,13,1,11,7,1.5944636678200692,0.0019085483098316034,11.970391663539004,-0.0001593253940710788,5.041595834642157,1.744576487404539,2.8878073433616698 +65,89,100000,8,1,7,4,1.3633136094674556,0.000914967495496275,8.385655001315365,-0.00010909919525321256,0.5926442843751507,1.7526471144005589,0.33810569831022175 +85,89,100000,9,2,7,6,1.5944636678200692,0.0005574555322074025,9.256726306383856,-6.027752972907231e-05,0.47742082222500953,1.749545840148993,0.2731358268501437 +130,89,100000,11,3,9,7,1.3633136094674556,0.001838165372668053,10.836494103857957,-0.00016957113874625437,3.6723727654220797,1.7464656246081653,2.102049172626637 +145,89,100000,12,1,9,8,1.9177170035671818,0.003389986707880464,11.28497208444765,-0.0003002045494311621,5.749584750819312,1.7457718576743617,3.291309739679777 +170,89,100000,13,1,11,7,1.5944636678200692,0.0003130222073435169,11.98514783141546,-2.611432060089635e-05,0.8268753002290057,1.746727065618272,0.47332772806151563 +65,90,100000,8,1,7,4,1.3633136094674556,0.0012719096713712651,8.377356022420278,-0.00015202679604995814,0.8238434706041701,1.7509125830597554,0.47114120247209795 +85,90,100000,9,2,7,6,1.5944636678200692,0.0015691368263405462,9.266529267959013,-0.00016940910362950572,1.3438535462167178,1.7513986259047012,0.7676441918532958 +130,90,100000,11,3,9,7,1.3633136094674556,0.002389341506493983,10.837264687164513,-0.00022040426977978662,4.773538227958791,1.74658981581271,2.7321902557206967 +145,90,100000,12,1,9,8,1.9177170035671818,-0.00044360773101274,11.300781064251488,3.930192831473785e-05,-0.7523806036310693,1.7482174881848809,-0.43088893787785376 +170,90,100000,13,1,11,7,1.5944636678200692,0.0018723608325707508,11.974414000508313,-0.00015628308393616976,4.946003475944871,1.7451627066944597,2.8326648119428897 +65,91,100000,8,1,7,4,1.3633136094674556,0.0006782400517256895,8.376864371130804,-8.111780291432565e-05,0.43931078652309663,1.7508098252890565,0.2513894931679747 +85,91,100000,9,2,7,6,1.5944636678200692,0.0012509590550156416,9.258631542071752,-0.00013491361284809992,1.0713570251074063,1.7499059347506842,0.6113346277498998 +130,91,100000,11,3,9,7,1.3633136094674556,0.0014439739099302367,10.824638745288954,-0.0001332615085481801,2.884838622060938,1.744554953499066,1.6519452889082344 +145,91,100000,12,1,9,8,1.9177170035671818,-0.00022076296703261623,11.296064398327466,1.954588846737968e-05,-0.3744248866361968,1.7474878255352446,-0.21429246560479864 +170,91,100000,13,1,11,7,1.5944636678200692,0.00023013585283631434,11.9728208086143,-1.9270225206177542e-05,0.6079238084173804,1.744930513363085,0.3492770137684797 +65,92,100000,8,1,7,4,1.3633136094674556,0.002674318103896615,8.376276003701363,-0.000319282890410234,1.7322138181703002,1.7506868533235682,0.9894790183383998 +85,92,100000,9,2,7,6,1.5944636678200692,0.0030744015404852417,9.252506468123155,-0.0003320642448783346,2.633005193250478,1.7487482795178637,1.504684125243239 +130,92,100000,11,3,9,7,1.3633136094674556,0.0026498658655250734,10.822174333513319,-0.00024449575755808696,5.29402597898531,1.7441577761085025,3.030834779347449 +145,92,100000,12,1,9,8,1.9177170035671818,-0.001468160176352554,11.295348429605514,0.00013000041551317325,-2.49007211211003,1.7473770660192791,-1.425266987298064 +170,92,100000,13,1,11,7,1.5944636678200692,0.003596190735964572,11.966263235221966,-0.000300163732565111,9.49964962459735,1.7439748062587352,5.4405327924415445 +65,93,100000,8,1,7,4,1.3633136094674556,0.00010871334695942369,8.389896685598961,-1.3116740152521386e-05,0.07041599185537124,1.7535336492888505,0.04064965445921911 +85,93,100000,9,2,7,6,1.5944636678200692,0.0021643493794787512,9.26519241363552,-0.0002337380136972749,1.8536105583906757,1.751145956889421,1.0591380556646104 +130,93,100000,11,3,9,7,1.3633136094674556,-0.0015366401170567828,10.846615312986874,0.0001417670775463644,-3.0699715053077514,1.748096811194317,-1.757382596268105 +145,93,100000,12,1,9,8,1.9177170035671818,-0.002708531470074138,11.293604231304938,0.00023990213837500433,-4.593803038003417,1.7471072406014965,-2.6301808087179355 +170,93,100000,13,1,11,7,1.5944636678200692,0.0021642187103583918,11.979606390178652,-0.00018067147479016235,5.716971364670464,1.7459194505994993,3.2747096887910483 +65,94,100000,8,1,7,4,1.3633136094674556,-0.0011961409315171382,8.381309873562982,0.0001428414432117428,-0.774766415047677,1.7517389592694783,-0.4426751800749334 +85,94,100000,9,2,7,6,1.5944636678200692,0.002291599111624404,9.26193071127946,-0.00024741181598274525,1.9625908594890005,1.7505294864872536,1.1210982141219004 +130,94,100000,11,3,9,7,1.3633136094674556,-0.004436398735656872,10.843965331106538,0.00040920421335291154,-8.863244915625646,1.7476697263626837,-5.072604834015845 +145,94,100000,12,1,9,8,1.9177170035671818,0.0027467996083961103,11.29600854462284,-0.00024325488747467972,4.658707689112159,1.7474791850330835,2.666938865141043 +170,94,100000,13,1,11,7,1.5944636678200692,0.0008187448919967343,11.971636723998563,-6.835310355546818e-05,2.162785618714301,1.744757943723112,1.238914835515681 +65,95,100000,8,1,7,4,1.3633136094674556,0.0052772033320056,8.383664766149149,-0.0006299313861343279,3.4181590139464713,1.7522311445185998,1.9521994704191121 +85,95,100000,9,2,7,6,1.5944636678200692,0.0013479056919527067,9.260530298572887,-0.00014565930443860738,1.1543848909089476,1.750264804768881,0.6600266257604669 +130,95,100000,11,3,9,7,1.3633136094674556,-0.000963084477158964,10.828194090698698,8.877906808503217e-05,-1.924095218693928,1.7451279514153861,-1.1005290640523453 +145,95,100000,12,1,9,8,1.9177170035671818,0.001281763355696979,11.291754087815612,-0.00011343093715697559,2.173933905682501,1.7468210255881005,1.2436065641016067 +170,95,100000,13,1,11,7,1.5944636678200692,-0.0013553123106665498,11.996209014290745,0.00011317809752659728,-3.5801749763927138,1.7483391331353177,-2.051377578888657 +65,96,100000,8,1,7,4,1.3633136094674556,-0.001838480970553123,8.37711092053185,0.0002193772807163874,-1.1908239849982998,1.7508613554433774,-0.6798648561784658 +85,96,100000,9,2,7,6,1.5944636678200692,0.00016344450500783338,9.260188937145553,-1.77570403466637e-05,0.13997853722970607,1.750200286553109,0.0804625524519151 +130,96,100000,11,3,9,7,1.3633136094674556,-0.002931834092351087,10.84354033890257,0.00027042800249409485,-5.857355292172848,1.7476012324136405,-3.352297820848022 +145,96,100000,12,1,9,8,1.9177170035671818,0.001337080354218039,11.29035883388533,-0.00011843117273632048,2.267754265042151,1.7466051814524155,1.2984269327275157 +170,96,100000,13,1,11,7,1.5944636678200692,0.000990964367425077,11.98813631934485,-8.26809673037986e-05,2.6177182947650315,1.7471626107467066,1.4986104752996012 +65,97,100000,8,1,7,4,1.3633136094674556,-0.0003754465060693793,8.379966057177283,4.480488755117737e-05,-0.2431848420909766,1.7514580943984206,-0.1388533412922284 +85,97,100000,9,2,7,6,1.5944636678200692,-6.534261137738127e-05,9.269562969909563,7.226525669373415e-06,-0.05596127663598488,1.751972003625092,-0.032745586503457956 +130,97,100000,11,3,9,7,1.3633136094674556,0.0016859878449167246,10.838452799759764,-0.00015550852250742226,3.368345382068601,1.7467812982041442,1.9277252219333714 +145,97,100000,12,1,9,8,1.9177170035671818,-0.0027697944308224293,11.279694365073224,0.00024520902498950843,-4.6977080427308975,1.744955400718365,-2.6883631634983343 +170,97,100000,13,1,11,7,1.5944636678200692,0.0006150489294343065,11.962609781450908,-5.1458136283306574e-05,1.6247050728365962,1.7434423483637924,0.9326898872652015 +65,98,100000,8,1,7,4,1.3633136094674556,0.001631438517442848,8.38073179084809,-0.0001947810247375746,1.056718099201492,1.7516181368647907,0.603639414879543 +85,98,100000,9,2,7,6,1.5944636678200692,0.0018972239730797058,9.25195516306503,-0.00020480252738481856,1.6248367391494778,1.7486440813986612,0.9280225634606897 +130,98,100000,11,3,9,7,1.3633136094674556,0.003707459353583067,10.830754709055244,-0.00034200791528385703,7.406935720503596,1.745540633957783,4.239621557474931 +145,98,100000,12,1,9,8,1.9177170035671818,-0.0007306767789865959,11.284207113443799,6.460083423492913e-05,-1.2392638757176038,1.7456535175632417,-0.7082549392130908 +170,98,100000,13,1,11,7,1.5944636678200692,0.0014128138423185306,11.964756779405493,-0.00011797794226441581,3.7320702577271168,1.7437552539273993,2.1383758063945906 +65,99,100000,8,1,7,4,1.3633136094674556,0.0007709580126453108,8.379425179146468,-9.203144995860967e-05,0.4993662200422165,1.751345047973329,0.2852116148294109 +85,99,100000,9,2,7,6,1.5944636678200692,-0.002142984008252181,9.257484282112983,0.0002314780990256577,-1.8353126449091453,1.7496890995735386,-1.048897694700627 +130,99,100000,11,3,9,7,1.3633136094674556,0.0010868300558063168,10.839192862127375,-0.0001002544952174592,2.1713199241655174,1.746900570495783,1.2427815268688593 +145,99,100000,12,1,9,8,1.9177170035671818,-0.0023431335357349276,11.289802514336415,0.00020746025947268772,-3.974070109147437,1.7465191194750262,-2.2745024147461255 +170,99,100000,13,1,11,7,1.5944636678200692,0.003121319540133243,11.978643608775245,-0.0002605374758644719,8.245236188708999,1.7457791339042643,4.7222982902943915 diff --git a/results/server-20260828/P33-cross-size-covariance/checksums.sha256 b/results/server-20260828/P33-cross-size-covariance/checksums.sha256 new file mode 100644 index 000000000..5ca696d62 --- /dev/null +++ b/results/server-20260828/P33-cross-size-covariance/checksums.sha256 @@ -0,0 +1,9 @@ +306fddd4ca431e593df59c481930bfeb909ad6391d3e7805d45dc3d38e78e59f results/server-20260828/P33-cross-size-covariance/ROOT_DOUBLING_REPORT.md +ced9bcd5b596450dc95804139b3a08d7fcbc2efb7ca9bf170a71f7762eb127a0 results/server-20260828/P33-cross-size-covariance/batch_metrics.csv +3a419a128778a17b50737bec080b126ac957d3f34f794e66a3bf5a8cf3908c56 results/server-20260828/P33-cross-size-covariance/cross_size_covariance.csv +83ab6c6ea26fd2bba29c5e95716ccb34903e0a223cee1958ba70c8739e4f3517 results/server-20260828/P33-cross-size-covariance/delta_M_covariance.csv +48f27d0feb46f36fc2b0b463cbd69c5ad54d12117fa5caae631ae07f7f29de80 results/server-20260828/P33-cross-size-covariance/delta_M_observations.csv +5f660e0b4b398da604dbb7fd662c6b73bfc09185e7cbb59e4df7214182b0061e results/server-20260828/P33-cross-size-covariance/provenance.txt +4782b8468811494e1c255966b4671c493a1c85a5e62ba53a05b68134b1c83e69 results/server-20260828/P33-cross-size-covariance/root_doubling.csv +25ce9dc8f9b20c6418174648d1f9d81ba7716cc221cae5f451e02e5822859f14 results/server-20260828/P33-cross-size-covariance/root_doubling.json +1bbe13b35d0649df53ff885ebedde04d5b4b79af0a0749afd64d420909fac262 results/server-20260828/P33-cross-size-covariance/summary.json diff --git a/results/server-20260828/P33-cross-size-covariance/cross_size_covariance.csv b/results/server-20260828/P33-cross-size-covariance/cross_size_covariance.csv new file mode 100644 index 000000000..c8933c91c --- /dev/null +++ b/results/server-20260828/P33-cross-size-covariance/cross_size_covariance.csv @@ -0,0 +1,91 @@ +metric,N_i,N_j,covariance_of_means,correlation +delta_M,65,65,4.119146800127247e-08,1.0 +delta_M,65,85,5.876353602264557e-09,0.14312892203238006 +delta_M,65,130,1.018386615659038e-08,0.2124895684216962 +delta_M,65,145,3.4029682688840476e-09,0.08011986732564044 +delta_M,65,170,-6.730410891680027e-09,-0.16377147700181593 +delta_M,85,85,4.092170981715827e-08,1.0 +delta_M,85,130,-1.8439831301180519e-09,-0.038601894932351666 +delta_M,85,145,1.3325537703834474e-09,0.03147703475557263 +delta_M,85,170,1.710880217075913e-09,0.04176793851433608 +delta_M,130,130,5.576258099449926e-08,1.0 +delta_M,130,145,1.0892075145509168e-08,0.22040688271331427 +delta_M,130,170,-1.0204513470939285e-09,-0.021341315772203193 +delta_M,145,145,4.379535855677735e-08,1.0 +delta_M,145,170,-2.265603996983366e-09,-0.05346508739209135 +delta_M,170,170,4.1001463250944075e-08,1.0 +root_gap,65,65,5.866450874249777e-10,1.0 +root_gap,65,85,7.580867808560285e-11,0.1432390601366808 +root_gap,65,130,1.1210414393960396e-10,0.21250054410776986 +root_gap,65,145,3.5920607812670105e-11,0.08002190043765224 +root_gap,65,170,-6.701991764532355e-11,-0.16372744447652507 +root_gap,85,85,4.774627374873381e-10,1.0 +root_gap,85,130,-1.8353403167581545e-11,-0.03856319086211097 +root_gap,85,145,1.2756972455857678e-11,0.0315014670373158 +root_gap,85,170,1.544662847724428e-11,0.041828209223038676 +root_gap,130,130,4.744034101676469e-10,1.0 +root_gap,130,145,8.895634018751953e-11,0.22037174442119933 +root_gap,130,170,-7.845799368825672e-12,-0.021314179045131408 +root_gap,145,145,3.4347425708577105e-10,1.0 +root_gap,145,170,-1.675753607452283e-11,-0.053501798216857945 +root_gap,170,170,2.8562049992285786e-10,1.0 +mean_M_prime,65,65,4.3223467586572026e-07,1.0 +mean_M_prime,65,85,7.308692929736823e-08,0.117470070889827 +mean_M_prime,65,130,-2.2209450146739506e-08,-0.03259339351983675 +mean_M_prime,65,145,-3.4533332030693737e-08,-0.048174533202652 +mean_M_prime,65,170,1.9061217132940608e-07,0.2567874456606357 +mean_M_prime,85,85,8.955820171414193e-07,1.0 +mean_M_prime,85,130,6.343662674655e-10,0.0006467537791250562 +mean_M_prime,85,145,-1.820711762031836e-07,-0.1764523102750015 +mean_M_prime,85,170,2.461292586217648e-08,0.023035281425302045 +mean_M_prime,130,130,1.0742289389169762e-06,1.0 +mean_M_prime,130,145,2.1414638065900325e-08,0.01894964804591949 +mean_M_prime,130,170,9.568959083996497e-08,0.08177098606952435 +mean_M_prime,145,145,1.18883705509762e-06,1.0 +mean_M_prime,145,170,-4.947247780868908e-08,-0.04018698797727118 +mean_M_prime,170,170,1.2747765844286785e-06,1.0 +A_M,65,65,0.01728160755688808,1.0 +A_M,65,85,0.003259773929264314,0.1431289220323801 +A_M,65,130,0.013178418486786072,0.21248956842169622 +A_M,65,145,0.0037383918273593015,0.08011986732564046 +A_M,65,170,-0.011515820391408348,-0.16377147700181596 +A_M,85,85,0.030014839449758086,1.0 +A_M,85,130,-0.003155079069165989,-0.03860189493235168 +A_M,85,145,0.001935594385621231,0.031477034755572654 +A_M,85,170,0.003870576012504736,0.04176793851433606 +A_M,130,130,0.2225703054315265,1.0 +A_M,130,145,0.03690721637305419,0.22040688271331424 +A_M,130,170,-0.005385417165347191,-0.021341315772203162 +A_M,145,145,0.12598100124823863,1.0 +A_M,145,170,-0.010150498151240545,-0.05346508739209133 +A_M,170,170,0.28610740292451986,1.0 +B,65,65,1.8881417162932415e-08,1.0 +B,65,85,2.8871218250520156e-09,0.11747007088981634 +B,65,130,-7.481118616376599e-10,-0.032593393519838365 +B,65,145,-1.1165623376312953e-09,-0.04817453320263986 +B,65,170,5.80617035893371e-09,0.2567874456606353 +B,85,85,3.1991983731822336e-08,1.0 +B,85,130,1.9323207920819662e-11,0.0006467537791200348 +B,85,145,-5.323485798523715e-09,-0.17645231027500244 +B,85,170,6.77973627979215e-10,0.02303528142529086 +B,130,130,2.790225693373704e-08,1.0 +B,130,145,5.339111378626571e-10,0.018949648045913748 +B,130,170,2.2475926072517833e-09,0.08177098606953026 +B,145,145,2.845092111949515e-08,1.0 +B,145,170,-1.1154043041218853e-09,-0.040186987977262396 +B,170,170,2.7076803083503395e-08,1.0 +A_p,65,65,0.0056342657128826785,1.0 +A_p,65,85,0.0010645672231885722,0.1432390601366808 +A_p,65,130,0.004306689328932628,0.21250054410776983 +A_p,65,145,0.001220467180721915,0.08002190043765225 +A_p,65,170,-0.0037645931535935195,-0.1637274444765251 +A_p,85,85,0.00980360785774987,1.0 +A_p,85,130,-0.0010309337632353867,-0.03856319086211096 +A_p,85,145,0.0006337563547654923,0.031501467037315795 +A_p,85,170,0.0012686450809725927,0.04182820922303868 +A_p,130,130,0.0729003596969253,1.0 +A_p,130,145,0.01208980586099178,0.2203717444211993 +A_p,130,170,-0.0017628337142792916,-0.02131417904513141 +A_p,145,145,0.04128546342386022,1.0 +A_p,145,170,-0.0033300048312213146,-0.05350179821685795 +A_p,170,170,0.0938330439644809,1.0 diff --git a/results/server-20260828/P33-cross-size-covariance/delta_M_covariance.csv b/results/server-20260828/P33-cross-size-covariance/delta_M_covariance.csv new file mode 100644 index 000000000..bc065e0cb --- /dev/null +++ b/results/server-20260828/P33-cross-size-covariance/delta_M_covariance.csv @@ -0,0 +1,16 @@ +row_id_i,row_id_j,covariance +65:p33-working-tree-10m,65:p33-working-tree-10m,4.119146800127247e-08 +65:p33-working-tree-10m,85:p33-working-tree-10m,5.876353602264557e-09 +65:p33-working-tree-10m,130:p33-working-tree-10m,1.018386615659038e-08 +65:p33-working-tree-10m,145:p33-working-tree-10m,3.4029682688840476e-09 +65:p33-working-tree-10m,170:p33-working-tree-10m,-6.730410891680027e-09 +85:p33-working-tree-10m,85:p33-working-tree-10m,4.092170981715827e-08 +85:p33-working-tree-10m,130:p33-working-tree-10m,-1.8439831301180519e-09 +85:p33-working-tree-10m,145:p33-working-tree-10m,1.3325537703834474e-09 +85:p33-working-tree-10m,170:p33-working-tree-10m,1.710880217075913e-09 +130:p33-working-tree-10m,130:p33-working-tree-10m,5.576258099449926e-08 +130:p33-working-tree-10m,145:p33-working-tree-10m,1.0892075145509168e-08 +130:p33-working-tree-10m,170:p33-working-tree-10m,-1.0204513470939285e-09 +145:p33-working-tree-10m,145:p33-working-tree-10m,4.379535855677735e-08 +145:p33-working-tree-10m,170:p33-working-tree-10m,-2.265603996983366e-09 +170:p33-working-tree-10m,170:p33-working-tree-10m,4.1001463250944075e-08 diff --git a/results/server-20260828/P33-cross-size-covariance/delta_M_observations.csv b/results/server-20260828/P33-cross-size-covariance/delta_M_observations.csv new file mode 100644 index 000000000..46581c700 --- /dev/null +++ b/results/server-20260828/P33-cross-size-covariance/delta_M_observations.csv @@ -0,0 +1,6 @@ +row_id,N,seed,delta_M,delta_M_se,delta_cos4,a1,b1,a2,b2 +65:p33-working-tree-10m,65,p33-working-tree-10m,0.0007165348935773727,0.0002029568131432706,1.3633136094674556,8,1,7,4 +85:p33-working-tree-10m,85,p33-working-tree-10m,0.0007303001530936115,0.00020229115110938063,1.5944636678200692,9,2,7,6 +130:p33-working-tree-10m,130,p33-working-tree-10m,0.00044969161193581767,0.00023614101929673138,1.3633136094674556,11,3,9,7 +145:p33-working-tree-10m,145,p33-working-tree-10m,0.0006400700889027388,0.00020927340623399179,1.9177170035671818,12,1,9,8 +170:p33-working-tree-10m,170,p33-working-tree-10m,0.0005827972568741277,0.00020248818052159012,1.5944636678200692,13,1,11,7 diff --git a/results/server-20260828/P33-cross-size-covariance/provenance.txt b/results/server-20260828/P33-cross-size-covariance/provenance.txt new file mode 100644 index 000000000..88e9d7f26 --- /dev/null +++ b/results/server-20260828/P33-cross-size-covariance/provenance.txt @@ -0,0 +1,6 @@ +source_commit=07cfc3d2b9cc99401c669bfd54528a80107d9d2c +python=Python 3.9.25 +mpmath=1.4.1 + +python scripts/audit_threshold_rank_covariance.py --histograms results/server-20260828/P33/p33_all_sizes_arm_10m.hist.csv --p 0.592746050790 --training-sizes 65,85,130 --heldout-sizes 145,170 --seed-label p33-working-tree-10m --output-dir results/server-20260828/P33-cross-size-covariance +python scripts/score_threshold_rank_root_doubling.py --summary results/server-20260828/P33-cross-size-covariance/summary.json --json results/server-20260828/P33-cross-size-covariance/root_doubling.json --csv results/server-20260828/P33-cross-size-covariance/root_doubling.csv --report results/server-20260828/P33-cross-size-covariance/ROOT_DOUBLING_REPORT.md diff --git a/results/server-20260828/P33-cross-size-covariance/root_doubling.csv b/results/server-20260828/P33-cross-size-covariance/root_doubling.csv new file mode 100644 index 000000000..ba2193bd2 --- /dev/null +++ b/results/server-20260828/P33-cross-size-covariance/root_doubling.csv @@ -0,0 +1,5 @@ +covariance_mode,parent_N,child_N,parent_stored_root_gap,child_stored_root_gap,child_lineage_root_gap,observed_ratio,ratio_se_delta_method,target_ratio,fixed_prediction_residual,residual_se,residual_z +full_cross_size_covariance,65,130,-8.55353032987927e-05,-4.147850071973728e-05,4.147850071973728e-05,-0.48492843445991185,0.262368057159159,-0.25,2.0094674895039103e-05,2.133111943058559e-05,0.9420356470474958 +full_cross_size_covariance,85,170,-7.887012940016666e-05,-4.8639657913680464e-05,4.8639657913680464e-05,-0.6167056943306813,0.26841324712178766,-0.25,2.89221255636388e-05,1.754248006346863e-05,1.648690804207766 +diagonal_cross_size_covariance,65,130,-8.55353032987927e-05,-4.147850071973728e-05,4.147850071973728e-05,-0.48492843445991185,0.2893054987851225,-0.25,2.0094674895039103e-05,2.2606829236576015e-05,0.8888763074534818 +diagonal_cross_size_covariance,85,170,-7.887012940016666e-05,-4.8639657913680464e-05,4.8639657913680464e-05,-0.6167056943306813,0.27405922077385436,-0.25,2.89221255636388e-05,1.776124773251633e-05,1.6283836585810207 diff --git a/results/server-20260828/P33-cross-size-covariance/root_doubling.json b/results/server-20260828/P33-cross-size-covariance/root_doubling.json new file mode 100644 index 000000000..7ae9d86a9 --- /dev/null +++ b/results/server-20260828/P33-cross-size-covariance/root_doubling.json @@ -0,0 +1,93 @@ +{ + "format_version": 1, + "source_summary_format_version": 2, + "root_gap_method": "delete_one_jackknife_pseudovalues", + "full_cross_size_covariance": { + "target_ratio": -0.25, + "lineage_order_note": "N=130 and N=170 stored orientation order is reversed from 1+i genealogy", + "lineages": [ + { + "parent_N": 65, + "child_N": 130, + "parent_stored_root_gap": -8.55353032987927e-05, + "child_stored_root_gap": -4.147850071973728e-05, + "child_lineage_root_gap": 4.147850071973728e-05, + "observed_ratio": -0.48492843445991185, + "ratio_se_delta_method": 0.262368057159159, + "target_ratio": -0.25, + "fixed_prediction_residual": 2.0094674895039103e-05, + "residual_se": 2.133111943058559e-05, + "residual_z": 0.9420356470474958 + }, + { + "parent_N": 85, + "child_N": 170, + "parent_stored_root_gap": -7.887012940016666e-05, + "child_stored_root_gap": -4.8639657913680464e-05, + "child_lineage_root_gap": 4.8639657913680464e-05, + "observed_ratio": -0.6167056943306813, + "ratio_se_delta_method": 0.26841324712178766, + "target_ratio": -0.25, + "fixed_prediction_residual": 2.89221255636388e-05, + "residual_se": 1.754248006346863e-05, + "residual_z": 1.648690804207766 + } + ], + "residual_covariance": [ + [ + 4.55016656161906e-10, + 1.823557321475078e-11 + ], + [ + 1.823557321475078e-11, + 3.0773860677719435e-10 + ] + ], + "joint_residual_chi_square": 3.462461214294036, + "joint_degrees_of_freedom": 2 + }, + "diagonal_cross_size_covariance": { + "target_ratio": -0.25, + "lineage_order_note": "N=130 and N=170 stored orientation order is reversed from 1+i genealogy", + "lineages": [ + { + "parent_N": 65, + "child_N": 130, + "parent_stored_root_gap": -8.55353032987927e-05, + "child_stored_root_gap": -4.147850071973728e-05, + "child_lineage_root_gap": 4.147850071973728e-05, + "observed_ratio": -0.48492843445991185, + "ratio_se_delta_method": 0.2893054987851225, + "target_ratio": -0.25, + "fixed_prediction_residual": 2.0094674895039103e-05, + "residual_se": 2.2606829236576015e-05, + "residual_z": 0.8888763074534818 + }, + { + "parent_N": 85, + "child_N": 170, + "parent_stored_root_gap": -7.887012940016666e-05, + "child_stored_root_gap": -4.8639657913680464e-05, + "child_lineage_root_gap": 4.8639657913680464e-05, + "observed_ratio": -0.6167056943306813, + "ratio_se_delta_method": 0.27405922077385436, + "target_ratio": -0.25, + "fixed_prediction_residual": 2.89221255636388e-05, + "residual_se": 1.776124773251633e-05, + "residual_z": 1.6283836585810207 + } + ], + "residual_covariance": [ + [ + 5.110687281317081e-10, + 0.0 + ], + [ + 0.0, + 3.154619210158165e-10 + ] + ], + "joint_residual_chi_square": 3.4417344294858467, + "joint_degrees_of_freedom": 2 + } +} diff --git a/results/server-20260828/P33-cross-size-covariance/summary.json b/results/server-20260828/P33-cross-size-covariance/summary.json new file mode 100644 index 000000000..183007877 --- /dev/null +++ b/results/server-20260828/P33-cross-size-covariance/summary.json @@ -0,0 +1,753 @@ +{ + "format_version": 2, + "p": "0.59274605079", + "sizes": [ + 65, + 85, + 130, + 145, + 170 + ], + "batch_count": 100, + "nonlinear_estimator": { + "root_gap_method": "delete_one_jackknife_pseudovalues", + "by_N": { + "65": { + "full_estimate": -8.553498364436135e-05, + "bias_corrected_estimate": -8.55353032987927e-05, + "bias_correction": -3.1965443134237756e-10, + "delete_one_count": 100 + }, + "85": { + "full_estimate": -7.887040891822935e-05, + "bias_corrected_estimate": -7.887012940016666e-05, + "bias_correction": 2.7951806269425374e-10, + "delete_one_count": 100 + }, + "130": { + "full_estimate": -4.1478308148125924e-05, + "bias_corrected_estimate": -4.147850071973728e-05, + "bias_correction": -1.9257161135350677e-10, + "delete_one_count": 100 + }, + "145": { + "full_estimate": -5.668267644583162e-05, + "bias_corrected_estimate": -5.668206868513916e-05, + "bias_correction": 6.077606924602646e-10, + "delete_one_count": 100 + }, + "170": { + "full_estimate": -4.863967433909071e-05, + "bias_corrected_estimate": -4.8639657913680464e-05, + "bias_correction": 1.6425410246615358e-11, + "delete_one_count": 100 + } + } + }, + "metrics": { + "delta_M": { + "batch_field": "delta_M", + "means": { + "65": 0.0007165348935773727, + "85": 0.0007303001530936115, + "130": 0.00044969161193581767, + "145": 0.0006400700889027388, + "170": 0.0005827972568741277 + }, + "standard_errors": { + "65": 0.0002029568131432706, + "85": 0.00020229115110938063, + "130": 0.00023614101929673138, + "145": 0.00020927340623399179, + "170": 0.00020248818052159012 + }, + "covariance_of_means": [ + [ + 4.119146800127247e-08, + 5.876353602264557e-09, + 1.018386615659038e-08, + 3.4029682688840476e-09, + -6.730410891680027e-09 + ], + [ + 5.876353602264557e-09, + 4.092170981715827e-08, + -1.8439831301180519e-09, + 1.3325537703834474e-09, + 1.710880217075913e-09 + ], + [ + 1.018386615659038e-08, + -1.8439831301180519e-09, + 5.576258099449926e-08, + 1.0892075145509168e-08, + -1.0204513470939285e-09 + ], + [ + 3.4029682688840476e-09, + 1.3325537703834474e-09, + 1.0892075145509168e-08, + 4.379535855677735e-08, + -2.265603996983366e-09 + ], + [ + -6.730410891680027e-09, + 1.710880217075913e-09, + -1.0204513470939285e-09, + -2.265603996983366e-09, + 4.1001463250944075e-08 + ] + ], + "correlation_of_batch_values": [ + [ + 1.0, + 0.14312892203238006, + 0.2124895684216962, + 0.08011986732564044, + -0.16377147700181593 + ], + [ + 0.14312892203238006, + 1.0, + -0.038601894932351666, + 0.03147703475557263, + 0.04176793851433608 + ], + [ + 0.2124895684216962, + -0.038601894932351666, + 1.0, + 0.22040688271331427, + -0.021341315772203193 + ], + [ + 0.08011986732564044, + 0.03147703475557263, + 0.22040688271331427, + 1.0, + -0.05346508739209135 + ], + [ + -0.16377147700181593, + 0.04176793851433608, + -0.021341315772203193, + -0.05346508739209135, + 1.0 + ] + ] + }, + "root_gap": { + "batch_field": "root_gap_jackknife_pseudovalue", + "means": { + "65": -8.55353032987927e-05, + "85": -7.887012940016666e-05, + "130": -4.147850071973728e-05, + "145": -5.668206868513916e-05, + "170": -4.8639657913680464e-05 + }, + "standard_errors": { + "65": 2.422075736687393e-05, + "85": 2.185092074690076e-05, + "130": 2.1780803708028015e-05, + "145": 1.8533058492482322e-05, + "170": 1.690031064575021e-05 + }, + "covariance_of_means": [ + [ + 5.866450874249777e-10, + 7.580867808560285e-11, + 1.1210414393960396e-10, + 3.5920607812670105e-11, + -6.701991764532355e-11 + ], + [ + 7.580867808560285e-11, + 4.774627374873381e-10, + -1.8353403167581545e-11, + 1.2756972455857678e-11, + 1.544662847724428e-11 + ], + [ + 1.1210414393960396e-10, + -1.8353403167581545e-11, + 4.744034101676469e-10, + 8.895634018751953e-11, + -7.845799368825672e-12 + ], + [ + 3.5920607812670105e-11, + 1.2756972455857678e-11, + 8.895634018751953e-11, + 3.4347425708577105e-10, + -1.675753607452283e-11 + ], + [ + -6.701991764532355e-11, + 1.544662847724428e-11, + -7.845799368825672e-12, + -1.675753607452283e-11, + 2.8562049992285786e-10 + ] + ], + "correlation_of_batch_values": [ + [ + 1.0, + 0.1432390601366808, + 0.21250054410776986, + 0.08002190043765224, + -0.16372744447652507 + ], + [ + 0.1432390601366808, + 1.0, + -0.03856319086211097, + 0.0315014670373158, + 0.041828209223038676 + ], + [ + 0.21250054410776986, + -0.03856319086211097, + 1.0, + 0.22037174442119933, + -0.021314179045131408 + ], + [ + 0.08002190043765224, + 0.0315014670373158, + 0.22037174442119933, + 1.0, + -0.053501798216857945 + ], + [ + -0.16372744447652507, + 0.041828209223038676, + -0.021314179045131408, + -0.053501798216857945, + 1.0 + ] + ] + }, + "mean_M_prime": { + "batch_field": "mean_M_prime", + "means": { + "65": 8.379671857334957, + "85": 9.257971691098222, + "130": 10.841613054570116, + "145": 11.292251660411829, + "170": 11.981465570562152 + }, + "standard_errors": { + "65": 0.0006574455687474973, + "85": 0.0009463519520460764, + "130": 0.0010364501622928987, + "145": 0.001090338046248786, + "170": 0.0011290600446516024 + }, + "covariance_of_means": [ + [ + 4.3223467586572026e-07, + 7.308692929736823e-08, + -2.2209450146739506e-08, + -3.4533332030693737e-08, + 1.9061217132940608e-07 + ], + [ + 7.308692929736823e-08, + 8.955820171414193e-07, + 6.343662674655e-10, + -1.820711762031836e-07, + 2.461292586217648e-08 + ], + [ + -2.2209450146739506e-08, + 6.343662674655e-10, + 1.0742289389169762e-06, + 2.1414638065900325e-08, + 9.568959083996497e-08 + ], + [ + -3.4533332030693737e-08, + -1.820711762031836e-07, + 2.1414638065900325e-08, + 1.18883705509762e-06, + -4.947247780868908e-08 + ], + [ + 1.9061217132940608e-07, + 2.461292586217648e-08, + 9.568959083996497e-08, + -4.947247780868908e-08, + 1.2747765844286785e-06 + ] + ], + "correlation_of_batch_values": [ + [ + 1.0, + 0.117470070889827, + -0.03259339351983675, + -0.048174533202652, + 0.2567874456606357 + ], + [ + 0.117470070889827, + 1.0, + 0.0006467537791250562, + -0.1764523102750015, + 0.023035281425302045 + ], + [ + -0.03259339351983675, + 0.0006467537791250562, + 1.0, + 0.01894964804591949, + 0.08177098606952435 + ], + [ + -0.048174533202652, + -0.1764523102750015, + 0.01894964804591949, + 1.0, + -0.04018698797727118 + ], + [ + 0.2567874456606357, + 0.023035281425302045, + 0.08177098606952435, + -0.04018698797727118, + 1.0 + ] + ] + }, + "A_M": { + "batch_field": "A_M", + "means": { + "65": 0.46411518586642037, + "85": 0.6254498868822465, + "130": 0.8984149375607228, + "145": 1.0855904579377234, + "170": 1.539509483496766 + }, + "standard_errors": { + "65": 0.13145952820882967, + "85": 0.1732479132623481, + "130": 0.4717735743251486, + "145": 0.3549380245172932, + "170": 0.5348900849001782 + }, + "covariance_of_means": [ + [ + 0.01728160755688808, + 0.003259773929264314, + 0.013178418486786072, + 0.0037383918273593015, + -0.011515820391408348 + ], + [ + 0.003259773929264314, + 0.030014839449758086, + -0.003155079069165989, + 0.001935594385621231, + 0.003870576012504736 + ], + [ + 0.013178418486786072, + -0.003155079069165989, + 0.2225703054315265, + 0.03690721637305419, + -0.005385417165347191 + ], + [ + 0.0037383918273593015, + 0.001935594385621231, + 0.03690721637305419, + 0.12598100124823863, + -0.010150498151240545 + ], + [ + -0.011515820391408348, + 0.003870576012504736, + -0.005385417165347191, + -0.010150498151240545, + 0.28610740292451986 + ] + ], + "correlation_of_batch_values": [ + [ + 1.0, + 0.1431289220323801, + 0.21248956842169622, + 0.08011986732564046, + -0.16377147700181596 + ], + [ + 0.1431289220323801, + 1.0, + -0.03860189493235168, + 0.031477034755572654, + 0.04176793851433606 + ], + [ + 0.21248956842169622, + -0.03860189493235168, + 1.0, + 0.22040688271331424, + -0.021341315772203162 + ], + [ + 0.08011986732564046, + 0.031477034755572654, + 0.22040688271331424, + 1.0, + -0.05346508739209133 + ], + [ + -0.16377147700181596, + 0.04176793851433606, + -0.021341315772203162, + -0.05346508739209133, + 1.0 + ] + ] + }, + "B": { + "batch_field": "B", + "means": { + "65": 1.7513966050449201, + "85": 1.7497812211653792, + "130": 1.7472906212691859, + "145": 1.7468979994812677, + "170": 1.7461904093512315 + }, + "standard_errors": { + "65": 0.0001374096691027688, + "85": 0.00017886303064586134, + "130": 0.0001670396867027026, + "145": 0.00016867400842896676, + "170": 0.0001645503056317532 + }, + "covariance_of_means": [ + [ + 1.8881417162932415e-08, + 2.8871218250520156e-09, + -7.481118616376599e-10, + -1.1165623376312953e-09, + 5.80617035893371e-09 + ], + [ + 2.8871218250520156e-09, + 3.1991983731822336e-08, + 1.9323207920819662e-11, + -5.323485798523715e-09, + 6.77973627979215e-10 + ], + [ + -7.481118616376599e-10, + 1.9323207920819662e-11, + 2.790225693373704e-08, + 5.339111378626571e-10, + 2.2475926072517833e-09 + ], + [ + -1.1165623376312953e-09, + -5.323485798523715e-09, + 5.339111378626571e-10, + 2.845092111949515e-08, + -1.1154043041218853e-09 + ], + [ + 5.80617035893371e-09, + 6.77973627979215e-10, + 2.2475926072517833e-09, + -1.1154043041218853e-09, + 2.7076803083503395e-08 + ] + ], + "correlation_of_batch_values": [ + [ + 1.0, + 0.11747007088981634, + -0.032593393519838365, + -0.04817453320263986, + 0.2567874456606353 + ], + [ + 0.11747007088981634, + 1.0, + 0.0006467537791200348, + -0.17645231027500244, + 0.02303528142529086 + ], + [ + -0.032593393519838365, + 0.0006467537791200348, + 1.0, + 0.018949648045913748, + 0.08177098606953026 + ], + [ + -0.04817453320263986, + -0.17645231027500244, + 0.018949648045913748, + 1.0, + -0.040186987977262396 + ], + [ + 0.2567874456606353, + 0.02303528142529086, + 0.08177098606953026, + -0.040186987977262396, + 1.0 + ] + ] + }, + "A_p": { + "batch_field": "A_p_jackknife_pseudovalue", + "means": { + "65": 0.26507962212639086, + "85": 0.35738455282287973, + "130": 0.514178584659903, + "145": 0.6214371004106819, + "170": 0.8816043551667765 + }, + "standard_errors": { + "65": 0.0750617460020927, + "85": 0.09901317012271585, + "130": 0.27000066610459555, + "145": 0.20318824627389306, + "170": 0.3063217980563592 + }, + "covariance_of_means": [ + [ + 0.0056342657128826785, + 0.0010645672231885722, + 0.004306689328932628, + 0.001220467180721915, + -0.0037645931535935195 + ], + [ + 0.0010645672231885722, + 0.00980360785774987, + -0.0010309337632353867, + 0.0006337563547654923, + 0.0012686450809725927 + ], + [ + 0.004306689328932628, + -0.0010309337632353867, + 0.0729003596969253, + 0.01208980586099178, + -0.0017628337142792916 + ], + [ + 0.001220467180721915, + 0.0006337563547654923, + 0.01208980586099178, + 0.04128546342386022, + -0.0033300048312213146 + ], + [ + -0.0037645931535935195, + 0.0012686450809725927, + -0.0017628337142792916, + -0.0033300048312213146, + 0.0938330439644809 + ] + ], + "correlation_of_batch_values": [ + [ + 1.0, + 0.1432390601366808, + 0.21250054410776983, + 0.08002190043765225, + -0.1637274444765251 + ], + [ + 0.1432390601366808, + 1.0, + -0.03856319086211096, + 0.031501467037315795, + 0.04182820922303868 + ], + [ + 0.21250054410776983, + -0.03856319086211096, + 1.0, + 0.2203717444211993, + -0.02131417904513141 + ], + [ + 0.08002190043765225, + 0.031501467037315795, + 0.2203717444211993, + 1.0, + -0.05350179821685795 + ], + [ + -0.1637274444765251, + 0.04182820922303868, + -0.02131417904513141, + -0.05350179821685795, + 1.0 + ] + ] + } + }, + "constant_amplitude_audits": { + "A_M": { + "full_covariance": { + "training_sizes": [ + 65, + 85, + 130 + ], + "heldout_sizes": [ + 145, + 170 + ], + "amplitude": 0.529772851874458, + "amplitude_se": 0.11111938296684953, + "training_weights": [ + 0.6318749798676582, + 0.3451685063480102, + 0.02295651378433164 + ], + "heldout_observed": [ + 1.0855904579377234, + 1.539509483496766 + ], + "heldout_residuals": [ + 0.5558176060632654, + 1.009736631622308 + ], + "heldout_residual_covariance": [ + [ + 0.13057339150909225, + 0.0043836438550816335 + ], + [ + 0.0043836438550816335, + 0.3105832966763106 + ] + ], + "heldout_chi_square": 5.530015183913106, + "heldout_dof": 2 + }, + "diagonal_covariance": { + "training_sizes": [ + 65, + 85, + 130 + ], + "heldout_sizes": [ + 145, + 170 + ], + "amplitude": 0.5406918473187048, + "amplitude_se": 0.10223537922177721, + "training_weights": [ + 0.6048090566930285, + 0.3482301740149683, + 0.046960769292003164 + ], + "heldout_observed": [ + 1.0855904579377234, + 1.539509483496766 + ], + "heldout_residuals": [ + 0.5448986106190186, + 0.9988176361780612 + ], + "heldout_residual_covariance": [ + [ + 0.13643307401285923, + 0.010452072764620594 + ], + [ + 0.010452072764620594, + 0.29655947568914043 + ] + ], + "heldout_chi_square": 5.273346940077849, + "heldout_dof": 2 + } + }, + "A_p": { + "full_covariance": { + "training_sizes": [ + 65, + 85, + 130 + ], + "heldout_sizes": [ + 145, + 170 + ], + "amplitude": 0.3025673287616241, + "amplitude_se": 0.06347420238832799, + "training_weights": [ + 0.6325530887907066, + 0.34467471178570885, + 0.022772199423584504 + ], + "heldout_observed": [ + 0.6214371004106819, + 0.8816043551667765 + ], + "heldout_residuals": [ + 0.3188697716490578, + 0.5790370264051523 + ], + "heldout_residual_covariance": [ + [ + 0.0427829147048678, + 0.0014173867442952197 + ], + [ + 0.0014173867442952197, + 0.1018303758345064 + ] + ], + "heldout_chi_square": 5.5515929352417235, + "heldout_dof": 2 + }, + "diagonal_covariance": { + "training_sizes": [ + 65, + 85, + 130 + ], + "heldout_sizes": [ + 145, + 170 + ], + "amplitude": 0.3088453745739729, + "amplitude_se": 0.058400094230314656, + "training_weights": [ + 0.605326617506058, + 0.3478893745646439, + 0.046784007929298016 + ], + "heldout_observed": [ + 0.6214371004106819, + 0.8816043551667765 + ], + "heldout_residuals": [ + 0.312591725836709, + 0.5727589805928036 + ], + "heldout_residual_covariance": [ + [ + 0.04469603442996985, + 0.003410571006109631 + ], + [ + 0.003410571006109631, + 0.09724361497059053 + ] + ], + "heldout_chi_square": 5.292880163846318, + "heldout_dof": 2 + } + } + } +} diff --git a/scripts/audit_threshold_rank_covariance.py b/scripts/audit_threshold_rank_covariance.py new file mode 100644 index 000000000..d105382ad --- /dev/null +++ b/scripts/audit_threshold_rank_covariance.py @@ -0,0 +1,661 @@ +#!/usr/bin/env python3 +"""Audit cross-size covariance in aligned threshold-rank orientation batches. + +The C++ threshold-rank engine may deliberately reuse one counter stream across +different sizes. When batch ids are aligned, this script reconstructs each +batch's orientation difference and slope, and uses delete-one jackknife +pseudo-values for the nonlinear root gap. It then emits covariance matrices of +the estimators across sizes and compares full-covariance and diagonal-only +held-out constant-amplitude tests for + + A_M = N^(13/8) Delta M / Delta cos(4 theta) + A_p = -N^2 Delta p* / Delta cos(4 theta). + +This audits existing aggregates. It never changes the frozen simulation, RNG, +or model-selection protocol. +""" + +from __future__ import annotations + +import argparse +import csv +import json +import math +from pathlib import Path +from typing import Dict, List, Mapping, Optional, Sequence, Tuple + +import mpmath as mp + +from analyze_threshold_rank_orientation import ( + add_histograms, + cos4, + evaluate_histogram, + read_histograms, +) +from analyze_threshold_ranks import matching_root + + +Matrix = List[List[float]] +Vector = List[float] +Record = Dict[str, object] +RecordKey = Tuple[int, str, int] +Grouped = Dict[int, Dict[str, Dict[int, Record]]] + + +def _matvec(matrix: Matrix, vector: Vector) -> Vector: + return [math.fsum(a * b for a, b in zip(row, vector)) for row in matrix] + + +def _solve(matrix: Matrix, vector: Vector) -> Vector: + n = len(vector) + if len(matrix) != n or any(len(row) != n for row in matrix): + raise ValueError("linear system must be square") + augmented = [list(map(float, matrix[i])) + [float(vector[i])] for i in range(n)] + scale = max((abs(value) for row in matrix for value in row), default=0.0) + tolerance = max(scale * 1e-13, 1e-300) + for column in range(n): + pivot = max(range(column, n), key=lambda row: abs(augmented[row][column])) + if abs(augmented[pivot][column]) <= tolerance: + raise ArithmeticError("singular or ill-resolved matrix") + augmented[column], augmented[pivot] = augmented[pivot], augmented[column] + divisor = augmented[column][column] + for entry in range(column, n + 1): + augmented[column][entry] /= divisor + for row in range(n): + if row == column: + continue + factor = augmented[row][column] + for entry in range(column, n + 1): + augmented[row][entry] -= factor * augmented[column][entry] + return [augmented[row][-1] for row in range(n)] + + +def _inverse(matrix: Matrix) -> Matrix: + n = len(matrix) + columns = [ + _solve(matrix, [1.0 if row == column else 0.0 for row in range(n)]) + for column in range(n) + ] + return [[columns[column][row] for column in range(n)] for row in range(n)] + + +def _subset( + matrix: Matrix, + rows: Sequence[int], + columns: Optional[Sequence[int]] = None, +) -> Matrix: + if columns is None: + columns = rows + return [[matrix[i][j] for j in columns] for i in rows] + + +def _quadratic(vector: Vector, inverse_covariance: Matrix) -> float: + return math.fsum( + a * b for a, b in zip(vector, _matvec(inverse_covariance, vector)) + ) + + +def covariance_of_mean( + batch_vectors: Sequence[Sequence[float]], +) -> Tuple[Vector, Matrix]: + """Return column means and covariance matrix of those means. + + Rows are aligned independent batches and columns are sizes/observables. + """ + + if len(batch_vectors) < 2: + raise ValueError("at least two aligned batches are required") + width = len(batch_vectors[0]) + if width == 0 or any(len(row) != width for row in batch_vectors): + raise ValueError("batch matrix must be nonempty and rectangular") + if any(not math.isfinite(value) for row in batch_vectors for value in row): + raise ValueError("batch values must be finite") + batches = len(batch_vectors) + means = [ + math.fsum(row[column] for row in batch_vectors) / batches + for column in range(width) + ] + covariance = [[0.0] * width for _ in range(width)] + denominator = batches * (batches - 1) + for i in range(width): + for j in range(i, width): + value = math.fsum( + (row[i] - means[i]) * (row[j] - means[j]) + for row in batch_vectors + ) / denominator + covariance[i][j] = covariance[j][i] = value + return means, covariance + + +def jackknife_pseudovalues( + full_estimate: float, + delete_one_estimates: Sequence[float], +) -> List[float]: + """Convert delete-one estimates into standard jackknife pseudo-values.""" + + batches = len(delete_one_estimates) + if batches < 2: + raise ValueError("at least two delete-one estimates are required") + if not math.isfinite(full_estimate) or any( + not math.isfinite(value) for value in delete_one_estimates + ): + raise ValueError("jackknife estimates must be finite") + return [ + batches * full_estimate - (batches - 1) * value + for value in delete_one_estimates + ] + + +def correlations(covariance: Matrix) -> Matrix: + output = [[0.0] * len(covariance) for _ in covariance] + for i in range(len(covariance)): + if covariance[i][i] <= 0: + raise ValueError("covariance diagonal must be positive") + for j in range(len(covariance)): + output[i][j] = covariance[i][j] / math.sqrt( + covariance[i][i] * covariance[j][j] + ) + return output + + +def constant_heldout_audit( + values: Sequence[float], + covariance: Matrix, + sizes: Sequence[int], + training_sizes: Sequence[int], + heldout_sizes: Sequence[int], +) -> Dict[str, object]: + """Fit one constant on training sizes and score correlated held-out residuals.""" + + if len(values) != len(sizes) or len(covariance) != len(sizes): + raise ValueError("values/covariance/sizes dimensions disagree") + indices = {size: index for index, size in enumerate(sizes)} + if len(indices) != len(sizes): + raise ValueError("sizes must be unique") + try: + training = [indices[size] for size in training_sizes] + heldout = [indices[size] for size in heldout_sizes] + except KeyError as exc: + raise ValueError("training or held-out size is absent") from exc + + c_tt = _subset(covariance, training) + inv_tt = _inverse(c_tt) + ones_t = [1.0] * len(training) + raw_weights = _matvec(inv_tt, ones_t) + denominator = math.fsum(raw_weights) + if denominator <= 0: + raise ValueError("constant-fit information must be positive") + weights = [value / denominator for value in raw_weights] + amplitude = math.fsum( + weight * values[index] + for weight, index in zip(weights, training) + ) + amplitude_variance = 1.0 / denominator + + c_hh = _subset(covariance, heldout) + c_ht = _subset(covariance, heldout, training) + covariance_with_amplitude = _matvec(c_ht, weights) + residual_covariance = [ + [ + c_hh[i][j] + + amplitude_variance + - covariance_with_amplitude[i] + - covariance_with_amplitude[j] + for j in range(len(heldout)) + ] + for i in range(len(heldout)) + ] + residuals = [values[index] - amplitude for index in heldout] + chi_square = _quadratic(residuals, _inverse(residual_covariance)) + return { + "training_sizes": list(training_sizes), + "heldout_sizes": list(heldout_sizes), + "amplitude": amplitude, + "amplitude_se": math.sqrt(amplitude_variance), + "training_weights": weights, + "heldout_observed": [values[index] for index in heldout], + "heldout_residuals": residuals, + "heldout_residual_covariance": residual_covariance, + "heldout_chi_square": chi_square, + "heldout_dof": len(heldout), + } + + +def _orientation_batches( + records: Mapping[RecordKey, Record], +) -> Tuple[List[int], List[int], Grouped]: + sizes = sorted({key[0] for key in records}) + by_size: Grouped = {} + common_batches: Optional[List[int]] = None + for n in sizes: + by_size[n] = {} + for orientation in ("first", "second"): + selected = { + key[2]: records[key] + for key in records + if key[0] == n and key[1] == orientation + } + if not selected: + raise ValueError("N={} has no {} batches".format(n, orientation)) + ids = sorted(selected) + if ids != list(range(len(ids))): + raise ValueError( + "N={} {} batch ids are not contiguous".format(n, orientation) + ) + by_size[n][orientation] = selected + if common_batches is None: + common_batches = ids + elif ids != common_batches: + raise ValueError("all sizes/orientations must share aligned batch ids") + for batch in common_batches or []: + first_samples = int(by_size[n]["first"][batch]["samples"]) + second_samples = int(by_size[n]["second"][batch]["samples"]) + if first_samples != second_samples: + raise ValueError("paired orientations must have equal batch samples") + if common_batches is None: + raise ValueError("no batches found") + return sizes, common_batches, by_size + + +def _root_from_records(n: int, selected: Sequence[Record]) -> mp.mpf: + if not selected: + raise ValueError("cannot reconstruct a root from zero batches") + minus = add_histograms(selected, "minus") + plus = add_histograms(selected, "plus") + samples = sum(int(row["samples"]) for row in selected) + return matching_root(n, samples, minus, plus) + + +def _root_gap_pseudovalues( + sizes: Sequence[int], + batches: Sequence[int], + by_size: Grouped, +) -> Tuple[Dict[Tuple[int, int], float], Dict[str, object]]: + pseudo_by_size_batch: Dict[Tuple[int, int], float] = {} + details: Dict[str, object] = {} + for n in sizes: + first_all = [by_size[n]["first"][batch] for batch in batches] + second_all = [by_size[n]["second"][batch] for batch in batches] + full_gap = float( + _root_from_records(n, first_all) - _root_from_records(n, second_all) + ) + delete_one: List[float] = [] + for omitted in batches: + first_reduced = [ + by_size[n]["first"][batch] + for batch in batches + if batch != omitted + ] + second_reduced = [ + by_size[n]["second"][batch] + for batch in batches + if batch != omitted + ] + delete_one.append( + float( + _root_from_records(n, first_reduced) + - _root_from_records(n, second_reduced) + ) + ) + pseudovalues = jackknife_pseudovalues(full_gap, delete_one) + for batch, value in zip(batches, pseudovalues): + pseudo_by_size_batch[(n, batch)] = value + bias_corrected = math.fsum(pseudovalues) / len(pseudovalues) + details[str(n)] = { + "full_estimate": full_gap, + "bias_corrected_estimate": bias_corrected, + "bias_correction": bias_corrected - full_gap, + "delete_one_count": len(delete_one), + } + return pseudo_by_size_batch, details + + +def reconstruct_batch_metrics( + records: Mapping[RecordKey, Record], + p: mp.mpf, +) -> Tuple[List[int], List[Record], Dict[str, object]]: + sizes, batches, by_size = _orientation_batches(records) + root_pseudovalues, root_details = _root_gap_pseudovalues( + sizes, batches, by_size + ) + output: List[Record] = [] + for batch in batches: + for n in sizes: + first = by_size[n]["first"][batch] + second = by_size[n]["second"][batch] + first_m, first_d = evaluate_histogram(first, p) + second_m, second_d = evaluate_histogram(second, p) + delta_m = first_m - second_m + mean_slope = (first_d + second_d) / 2 + root_gap_pseudovalue = root_pseudovalues[(n, batch)] + delta_cos4 = cos4( + int(first["a"]), int(first["b"]) + ) - cos4(int(second["a"]), int(second["b"])) + if delta_cos4 == 0: + raise ValueError("zero angular leverage in a batch") + output.append( + { + "N": n, + "batch": batch, + "samples": int(first["samples"]), + "a1": int(first["a"]), + "b1": int(first["b"]), + "a2": int(second["a"]), + "b2": int(second["b"]), + "delta_cos4": delta_cos4, + "delta_M": float(delta_m), + "mean_M_prime": float(mean_slope), + "root_gap_jackknife_pseudovalue": root_gap_pseudovalue, + "A_M": float( + n ** (13.0 / 8.0) * delta_m / delta_cos4 + ), + "B": float(n ** (-3.0 / 8.0) * mean_slope), + "A_p_jackknife_pseudovalue": float( + -n * n * root_gap_pseudovalue / delta_cos4 + ), + } + ) + return sizes, output, root_details + + +def _matrix_by_field( + rows: Sequence[Record], + sizes: Sequence[int], + field: str, +) -> List[List[float]]: + by_batch: Dict[int, Dict[int, float]] = {} + for row in rows: + by_batch.setdefault(int(row["batch"]), {})[int(row["N"])] = float( + row[field] + ) + output = [] + for batch in sorted(by_batch): + if set(by_batch[batch]) != set(sizes): + raise ValueError( + "batch {} is incomplete for field {}".format(batch, field) + ) + output.append([by_batch[batch][n] for n in sizes]) + return output + + +def _diagonal(covariance: Matrix) -> Matrix: + return [ + [covariance[i][i] if i == j else 0.0 for j in range(len(covariance))] + for i in range(len(covariance)) + ] + + +def audit( + records: Mapping[RecordKey, Record], + p: mp.mpf, + training_sizes: Sequence[int], + heldout_sizes: Sequence[int], +) -> Tuple[List[Record], Dict[str, object]]: + sizes, batch_rows, root_details = reconstruct_batch_metrics(records, p) + metric_fields = { + "delta_M": "delta_M", + "root_gap": "root_gap_jackknife_pseudovalue", + "mean_M_prime": "mean_M_prime", + "A_M": "A_M", + "B": "B", + "A_p": "A_p_jackknife_pseudovalue", + } + payload: Dict[str, object] = { + "format_version": 2, + "p": mp.nstr(p, mp.mp.dps), + "sizes": sizes, + "batch_count": len({int(row["batch"]) for row in batch_rows}), + "nonlinear_estimator": { + "root_gap_method": "delete_one_jackknife_pseudovalues", + "by_N": root_details, + }, + "metrics": {}, + "constant_amplitude_audits": {}, + } + for metric, field in metric_fields.items(): + matrix = _matrix_by_field(batch_rows, sizes, field) + means, covariance = covariance_of_mean(matrix) + metric_payload = { + "batch_field": field, + "means": dict(zip(map(str, sizes), means)), + "standard_errors": dict( + zip( + map(str, sizes), + [math.sqrt(covariance[i][i]) for i in range(len(sizes))], + ) + ), + "covariance_of_means": covariance, + "correlation_of_batch_values": correlations(covariance), + } + metrics_payload = payload["metrics"] + assert isinstance(metrics_payload, dict) + metrics_payload[metric] = metric_payload + if metric in ("A_M", "A_p"): + audits = payload["constant_amplitude_audits"] + assert isinstance(audits, dict) + audits[metric] = { + "full_covariance": constant_heldout_audit( + means, covariance, sizes, training_sizes, heldout_sizes + ), + "diagonal_covariance": constant_heldout_audit( + means, + _diagonal(covariance), + sizes, + training_sizes, + heldout_sizes, + ), + } + return batch_rows, payload + + +def write_batch_csv(path: Path, rows: Sequence[Record]) -> None: + fields = [ + "N", + "batch", + "samples", + "a1", + "b1", + "a2", + "b2", + "delta_cos4", + "delta_M", + "mean_M_prime", + "root_gap_jackknife_pseudovalue", + "A_M", + "B", + "A_p_jackknife_pseudovalue", + ] + with path.open("w", newline="", encoding="utf-8") as handle: + writer = csv.DictWriter(handle, fieldnames=fields, lineterminator="\n") + writer.writeheader() + writer.writerows(rows) + + +def write_covariance_csv(path: Path, payload: Mapping[str, object]) -> None: + sizes = [int(value) for value in payload["sizes"]] + with path.open("w", newline="", encoding="utf-8") as handle: + writer = csv.DictWriter( + handle, + fieldnames=[ + "metric", + "N_i", + "N_j", + "covariance_of_means", + "correlation", + ], + lineterminator="\n", + ) + writer.writeheader() + metrics = payload["metrics"] + assert isinstance(metrics, dict) + for metric, raw in metrics.items(): + assert isinstance(raw, dict) + covariance = raw["covariance_of_means"] + correlation = raw["correlation_of_batch_values"] + for i, n_i in enumerate(sizes): + for j in range(i, len(sizes)): + writer.writerow( + { + "metric": metric, + "N_i": n_i, + "N_j": sizes[j], + "covariance_of_means": covariance[i][j], + "correlation": correlation[i][j], + } + ) + + +def write_challenge_inputs( + output_dir: Path, + batch_rows: Sequence[Record], + payload: Mapping[str, object], + seed_label: str, +) -> None: + sizes = [int(value) for value in payload["sizes"]] + representatives: Dict[int, Record] = {} + for row in batch_rows: + representatives.setdefault(int(row["N"]), row) + metrics = payload["metrics"] + assert isinstance(metrics, dict) + delta = metrics["delta_M"] + means = delta["means"] + standard_errors = delta["standard_errors"] + covariance = delta["covariance_of_means"] + + observation_path = output_dir / "delta_M_observations.csv" + with observation_path.open("w", newline="", encoding="utf-8") as handle: + fields = [ + "row_id", + "N", + "seed", + "delta_M", + "delta_M_se", + "delta_cos4", + "a1", + "b1", + "a2", + "b2", + ] + writer = csv.DictWriter(handle, fieldnames=fields, lineterminator="\n") + writer.writeheader() + for n in sizes: + row = representatives[n] + writer.writerow( + { + "row_id": "{}:{}".format(n, seed_label), + "N": n, + "seed": seed_label, + "delta_M": means[str(n)], + "delta_M_se": standard_errors[str(n)], + "delta_cos4": row["delta_cos4"], + "a1": row["a1"], + "b1": row["b1"], + "a2": row["a2"], + "b2": row["b2"], + } + ) + + covariance_path = output_dir / "delta_M_covariance.csv" + with covariance_path.open("w", newline="", encoding="utf-8") as handle: + writer = csv.DictWriter( + handle, + fieldnames=["row_id_i", "row_id_j", "covariance"], + lineterminator="\n", + ) + writer.writeheader() + for i, n_i in enumerate(sizes): + for j in range(i, len(sizes)): + writer.writerow( + { + "row_id_i": "{}:{}".format(n_i, seed_label), + "row_id_j": "{}:{}".format(sizes[j], seed_label), + "covariance": covariance[i][j], + } + ) + + +def parse_sizes(text: str) -> Tuple[int, ...]: + try: + values = tuple(int(value) for value in text.split(",")) + except ValueError as exc: + raise argparse.ArgumentTypeError( + "sizes must be comma-separated integers" + ) from exc + if ( + not values + or any(value <= 0 for value in values) + or len(set(values)) != len(values) + ): + raise argparse.ArgumentTypeError("sizes must be unique positive integers") + return values + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--histograms", type=Path, required=True) + parser.add_argument("--p", default="0.592746050790") + parser.add_argument("--dps", type=int, default=50) + parser.add_argument( + "--training-sizes", type=parse_sizes, default=(65, 85, 130) + ) + parser.add_argument( + "--heldout-sizes", type=parse_sizes, default=(145, 170) + ) + parser.add_argument("--seed-label", default="threshold-rank-coupled") + parser.add_argument("--output-dir", type=Path, required=True) + args = parser.parse_args() + if args.dps < 30: + raise SystemExit("--dps must be at least 30") + if set(args.training_sizes) & set(args.heldout_sizes): + raise SystemExit("training and held-out sizes must be disjoint") + mp.mp.dps = args.dps + p = mp.mpf(args.p) + if not 0 < p < 1: + raise SystemExit("--p must lie strictly between zero and one") + + records = read_histograms(args.histograms) + batch_rows, payload = audit( + records, p, args.training_sizes, args.heldout_sizes + ) + args.output_dir.mkdir(parents=True, exist_ok=True) + write_batch_csv(args.output_dir / "batch_metrics.csv", batch_rows) + write_covariance_csv( + args.output_dir / "cross_size_covariance.csv", payload + ) + write_challenge_inputs( + args.output_dir, batch_rows, payload, args.seed_label + ) + (args.output_dir / "summary.json").write_text( + json.dumps(payload, indent=2) + "\n", encoding="utf-8" + ) + + audits = payload["constant_amplitude_audits"] + print( + json.dumps( + { + "sizes": payload["sizes"], + "batch_count": payload["batch_count"], + "root_gap_method": payload["nonlinear_estimator"][ + "root_gap_method" + ], + "A_M_full_heldout_chi_square": audits["A_M"][ + "full_covariance" + ]["heldout_chi_square"], + "A_M_diagonal_heldout_chi_square": audits["A_M"][ + "diagonal_covariance" + ]["heldout_chi_square"], + "A_p_full_heldout_chi_square": audits["A_p"][ + "full_covariance" + ]["heldout_chi_square"], + "A_p_diagonal_heldout_chi_square": audits["A_p"][ + "diagonal_covariance" + ]["heldout_chi_square"], + }, + indent=2, + ) + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/score_threshold_rank_root_doubling.py b/scripts/score_threshold_rank_root_doubling.py new file mode 100644 index 000000000..463acbb63 --- /dev/null +++ b/scripts/score_threshold_rank_root_doubling.py @@ -0,0 +1,262 @@ +#!/usr/bin/env python3 +"""Score the no-fit Gaussian root-gap doubling relation from covariance audit output. + +Input is ``summary.json`` from ``audit_threshold_rank_covariance.py``. The +root-gap means and covariance there are based on delete-one jackknife +pseudo-values. This script preserves multiplication-by-``1+i`` lineage order, +which reverses the repository's display order at N=130 and N=170, and tests + + Delta p*(2N) / Delta p*(N) = -1/4. + +Both the measured full cross-size covariance and a diagonal-only diagnostic are +reported. The diagonal result is a comparison, not a replacement. +""" + +from __future__ import annotations + +import argparse +import csv +import json +import math +from pathlib import Path +from typing import Dict, List, Mapping, Sequence, Tuple + + +Matrix = List[List[float]] +Vector = List[float] +LINEAGES = ((65, 130), (85, 170)) +TARGET_RATIO = -0.25 + + +def _solve(matrix: Matrix, vector: Vector) -> Vector: + n = len(vector) + if len(matrix) != n or any(len(row) != n for row in matrix): + raise ValueError("linear system must be square") + augmented = [list(map(float, matrix[i])) + [float(vector[i])] for i in range(n)] + scale = max((abs(value) for row in matrix for value in row), default=0.0) + tolerance = max(scale * 1e-13, 1e-300) + for column in range(n): + pivot = max(range(column, n), key=lambda row: abs(augmented[row][column])) + if abs(augmented[pivot][column]) <= tolerance: + raise ArithmeticError("singular or ill-resolved residual covariance") + augmented[column], augmented[pivot] = augmented[pivot], augmented[column] + divisor = augmented[column][column] + for entry in range(column, n + 1): + augmented[column][entry] /= divisor + for row in range(n): + if row == column: + continue + factor = augmented[row][column] + for entry in range(column, n + 1): + augmented[row][entry] -= factor * augmented[column][entry] + return [augmented[row][-1] for row in range(n)] + + +def _matvec(matrix: Matrix, vector: Vector) -> Vector: + return [math.fsum(a * b for a, b in zip(row, vector)) for row in matrix] + + +def _quadratic(vector: Vector, covariance: Matrix) -> float: + solution = _solve(covariance, vector) + return math.fsum(a * b for a, b in zip(vector, solution)) + + +def _diagonal(covariance: Matrix) -> Matrix: + return [ + [covariance[i][i] if i == j else 0.0 for j in range(len(covariance))] + for i in range(len(covariance)) + ] + + +def _transform_covariance(covariance: Matrix, transform: Matrix) -> Matrix: + width = len(covariance) + if any(len(row) != width for row in covariance): + raise ValueError("root covariance must be square") + if any(len(row) != width for row in transform): + raise ValueError("lineage transform has the wrong width") + return [ + [ + math.fsum( + transform[i][a] * covariance[a][b] * transform[j][b] + for a in range(width) + for b in range(width) + ) + for j in range(len(transform)) + ] + for i in range(len(transform)) + ] + + +def _score_covariance( + values: Vector, + covariance: Matrix, + sizes: Sequence[int], +) -> Dict[str, object]: + index = {size: position for position, size in enumerate(sizes)} + missing = sorted({size for lineage in LINEAGES for size in lineage} - set(index)) + if missing: + raise ValueError("missing Gaussian doubling sizes: {}".format(missing)) + + transform: Matrix = [[0.0] * len(sizes) for _ in LINEAGES] + for row, (parent, child) in enumerate(LINEAGES): + # child_lineage = -child_stored, so + # residual = child_lineage - TARGET_RATIO*parent + # = -child_stored + 0.25*parent. + transform[row][index[parent]] = -TARGET_RATIO + transform[row][index[child]] = -1.0 + + residuals = _matvec(transform, values) + residual_covariance = _transform_covariance(covariance, transform) + chi_square = _quadratic(residuals, residual_covariance) + + lineages = [] + for row, (parent, child) in enumerate(LINEAGES): + p_index = index[parent] + c_index = index[child] + parent_gap = values[p_index] + stored_child_gap = values[c_index] + lineage_child_gap = -stored_child_gap + if parent_gap == 0.0: + raise ValueError("zero parent root gap prevents a ratio") + ratio = lineage_child_gap / parent_gap + d_parent = stored_child_gap / (parent_gap * parent_gap) + d_child = -1.0 / parent_gap + ratio_variance = ( + d_parent * d_parent * covariance[p_index][p_index] + + d_child * d_child * covariance[c_index][c_index] + + 2.0 * d_parent * d_child * covariance[p_index][c_index] + ) + residual_se = math.sqrt(residual_covariance[row][row]) + lineages.append( + { + "parent_N": parent, + "child_N": child, + "parent_stored_root_gap": parent_gap, + "child_stored_root_gap": stored_child_gap, + "child_lineage_root_gap": lineage_child_gap, + "observed_ratio": ratio, + "ratio_se_delta_method": math.sqrt(max(0.0, ratio_variance)), + "target_ratio": TARGET_RATIO, + "fixed_prediction_residual": residuals[row], + "residual_se": residual_se, + "residual_z": residuals[row] / residual_se, + } + ) + + return { + "target_ratio": TARGET_RATIO, + "lineage_order_note": ( + "N=130 and N=170 stored orientation order is reversed from 1+i genealogy" + ), + "lineages": lineages, + "residual_covariance": residual_covariance, + "joint_residual_chi_square": chi_square, + "joint_degrees_of_freedom": 2, + } + + +def score(summary: Mapping[str, object]) -> Dict[str, object]: + sizes = [int(value) for value in summary["sizes"]] + metrics = summary["metrics"] + if not isinstance(metrics, dict) or "root_gap" not in metrics: + raise ValueError("summary does not contain root-gap covariance") + root = metrics["root_gap"] + if not isinstance(root, dict): + raise ValueError("invalid root-gap metric payload") + means_map = root["means"] + covariance = root["covariance_of_means"] + if not isinstance(means_map, dict) or not isinstance(covariance, list): + raise ValueError("invalid root-gap means or covariance") + values = [float(means_map[str(size)]) for size in sizes] + covariance = [list(map(float, row)) for row in covariance] + if len(covariance) != len(sizes) or any(len(row) != len(sizes) for row in covariance): + raise ValueError("root-gap covariance dimension does not match sizes") + + return { + "format_version": 1, + "source_summary_format_version": summary.get("format_version"), + "root_gap_method": summary.get("nonlinear_estimator", {}).get( + "root_gap_method" + ) if isinstance(summary.get("nonlinear_estimator"), dict) else None, + "full_cross_size_covariance": _score_covariance(values, covariance, sizes), + "diagonal_cross_size_covariance": _score_covariance( + values, _diagonal(covariance), sizes + ), + } + + +def write_outputs( + result: Mapping[str, object], + json_path: Path, + csv_path: Path, + report_path: Path, +) -> None: + json_path.write_text(json.dumps(result, indent=2) + "\n", encoding="utf-8") + rows = [] + for covariance_mode in ( + "full_cross_size_covariance", + "diagonal_cross_size_covariance", + ): + audit = result[covariance_mode] + assert isinstance(audit, dict) + for row in audit["lineages"]: + rows.append({"covariance_mode": covariance_mode, **row}) + with csv_path.open("w", newline="", encoding="utf-8") as handle: + writer = csv.DictWriter(handle, fieldnames=list(rows[0]), lineterminator="\n") + writer.writeheader() + writer.writerows(rows) + + full = result["full_cross_size_covariance"] + diagonal = result["diagonal_cross_size_covariance"] + assert isinstance(full, dict) and isinstance(diagonal, dict) + lines = [ + "# Threshold-rank Gaussian root-gap doubling audit", + "", + "Frozen lineage prediction: `Delta p*(2N) / Delta p*(N) = -1/4`.", + "Child signs follow multiplication by `1+i`, not stored display order.", + "", + "| lineage | observed ratio | ratio SE | full-cov residual z | diagonal residual z |", + "|---|---:|---:|---:|---:|", + ] + for full_row, diagonal_row in zip(full["lineages"], diagonal["lineages"]): + lines.append( + "| {}->{} | {:.8g} | {:.3g} | {:.3f} | {:.3f} |".format( + full_row["parent_N"], + full_row["child_N"], + full_row["observed_ratio"], + full_row["ratio_se_delta_method"], + full_row["residual_z"], + diagonal_row["residual_z"], + ) + ) + lines.extend( + [ + "", + "Full-covariance joint residual chi-square: **{:.6g} / 2**.".format( + full["joint_residual_chi_square"] + ), + "Diagonal diagnostic chi-square: **{:.6g} / 2**.".format( + diagonal["joint_residual_chi_square"] + ), + "", + ] + ) + report_path.write_text("\n".join(lines), encoding="utf-8") + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--summary", type=Path, required=True) + parser.add_argument("--json", type=Path, required=True) + parser.add_argument("--csv", type=Path, required=True) + parser.add_argument("--report", type=Path, required=True) + args = parser.parse_args() + summary = json.loads(args.summary.read_text(encoding="utf-8")) + result = score(summary) + write_outputs(result, args.json, args.csv, args.report) + print(json.dumps(result, indent=2)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/validate_threshold_rank_covariance_archive.py b/scripts/validate_threshold_rank_covariance_archive.py new file mode 100644 index 000000000..afb808fd0 --- /dev/null +++ b/scripts/validate_threshold_rank_covariance_archive.py @@ -0,0 +1,413 @@ +#!/usr/bin/env python3 +"""Validate the committed threshold-rank covariance audit archive. + +This checker is deliberately independent of the simulation and reconstruction +path. It verifies the batch/geometry contract, covariance symmetry and +positive definiteness, reported standard errors/correlations, matrix +conditioning, jackknife centers, and held-out score metadata. +""" + +from __future__ import annotations + +import argparse +import csv +import json +import math +from pathlib import Path +from typing import Dict, List, Mapping, Sequence, Tuple + + +Matrix = List[List[float]] +Record = Dict[str, str] + + +def _as_float(value: object, label: str) -> float: + try: + result = float(value) + except (TypeError, ValueError) as exc: + raise ValueError("{} must be numeric".format(label)) from exc + if not math.isfinite(result): + raise ValueError("{} must be finite".format(label)) + return result + + +def _matrix(value: object, label: str) -> Matrix: + if not isinstance(value, list) or not value: + raise ValueError("{} must be a nonempty matrix".format(label)) + output: Matrix = [] + width = None + for row_index, raw_row in enumerate(value): + if not isinstance(raw_row, list): + raise ValueError("{} row {} is not a list".format(label, row_index)) + row = [ + _as_float(entry, "{}[{}]".format(label, row_index)) + for entry in raw_row + ] + if width is None: + width = len(row) + if not row or len(row) != width: + raise ValueError("{} must be nonempty and rectangular".format(label)) + output.append(row) + return output + + +def _inverse(matrix: Matrix) -> Matrix: + size = len(matrix) + if size == 0 or any(len(row) != size for row in matrix): + raise ValueError("matrix must be nonempty and square") + augmented = [ + list(map(float, matrix[row])) + + [1.0 if row == column else 0.0 for column in range(size)] + for row in range(size) + ] + scale = max(abs(value) for row in matrix for value in row) + tolerance = max(scale * 1e-14, 1e-300) + for column in range(size): + pivot = max(range(column, size), key=lambda row: abs(augmented[row][column])) + if abs(augmented[pivot][column]) <= tolerance: + raise ValueError("covariance matrix is singular or numerically unresolved") + augmented[column], augmented[pivot] = augmented[pivot], augmented[column] + divisor = augmented[column][column] + for entry in range(2 * size): + augmented[column][entry] /= divisor + for row in range(size): + if row == column: + continue + factor = augmented[row][column] + for entry in range(2 * size): + augmented[row][entry] -= factor * augmented[column][entry] + return [row[size:] for row in augmented] + + +def covariance_diagnostics( + covariance: Matrix, + label: str, + max_condition: float, +) -> Dict[str, float]: + """Require a finite symmetric positive-definite covariance matrix.""" + + size = len(covariance) + if size == 0 or any(len(row) != size for row in covariance): + raise ValueError("{} must be nonempty and square".format(label)) + if any(not math.isfinite(value) for row in covariance for value in row): + raise ValueError("{} contains non-finite entries".format(label)) + scale = max(abs(value) for row in covariance for value in row) + if scale <= 0.0: + raise ValueError("{} has no positive scale".format(label)) + symmetry_error = max( + abs(covariance[i][j] - covariance[j][i]) + for i in range(size) + for j in range(size) + ) + if symmetry_error > max(scale * 1e-12, 1e-300): + raise ValueError("{} is not symmetric".format(label)) + + symmetric = [ + [0.5 * (covariance[i][j] + covariance[j][i]) for j in range(size)] + for i in range(size) + ] + cholesky = [[0.0] * size for _ in range(size)] + minimum_pivot = math.inf + for i in range(size): + for j in range(i + 1): + value = symmetric[i][j] - math.fsum( + cholesky[i][k] * cholesky[j][k] for k in range(j) + ) + if i == j: + if value <= 0.0 or not math.isfinite(value): + raise ValueError("{} is not positive definite".format(label)) + minimum_pivot = min(minimum_pivot, value) + cholesky[i][j] = math.sqrt(value) + else: + cholesky[i][j] = value / cholesky[j][j] + + inverse = _inverse(symmetric) + norm = max(math.fsum(abs(value) for value in row) for row in symmetric) + inverse_norm = max(math.fsum(abs(value) for value in row) for row in inverse) + condition = norm * inverse_norm + if not math.isfinite(condition) or condition > max_condition: + raise ValueError( + "{} condition number {:.6g} exceeds {:.6g}".format( + label, condition, max_condition + ) + ) + return { + "dimension": float(size), + "infinity_norm_condition": condition, + "minimum_cholesky_pivot": minimum_pivot, + "maximum_symmetry_error": symmetry_error, + } + + +def read_batch_rows(path: Path) -> List[Record]: + with path.open(newline="", encoding="utf-8") as handle: + reader = csv.DictReader(handle) + rows = list(reader) + if not rows: + raise ValueError("batch metrics file is empty") + return rows + + +def validate_batch_rows(rows: Sequence[Mapping[str, str]]) -> Dict[str, object]: + required = { + "N", + "batch", + "samples", + "a1", + "b1", + "a2", + "b2", + "delta_cos4", + "delta_M", + "mean_M_prime", + "root_gap_jackknife_pseudovalue", + "A_M", + "B", + "A_p_jackknife_pseudovalue", + } + sample_counts = set() + geometries: Dict[int, set] = {} + angular_leverage: Dict[int, set] = {} + batches_by_size: Dict[int, set] = {} + numeric_fields = required - {"N", "batch", "samples", "a1", "b1", "a2", "b2"} + + for index, row in enumerate(rows): + missing = required - set(row) + if missing: + raise ValueError( + "batch row {} is missing {}".format(index, sorted(missing)) + ) + try: + n = int(row["N"]) + batch = int(row["batch"]) + samples = int(row["samples"]) + a1, b1 = int(row["a1"]), int(row["b1"]) + a2, b2 = int(row["a2"]), int(row["b2"]) + except (TypeError, ValueError) as exc: + raise ValueError("batch row {} has invalid integer fields".format(index)) from exc + if n <= 0 or batch < 0 or samples <= 0: + raise ValueError("batch row {} has invalid N/batch/samples".format(index)) + if a1 * a1 + b1 * b1 != n or a2 * a2 + b2 * b2 != n: + raise ValueError("batch row {} violates the Gaussian norm contract".format(index)) + if (a1, b1) == (a2, b2): + raise ValueError("batch row {} has identical orientations".format(index)) + for field in numeric_fields: + _as_float(row[field], "row {} {}".format(index, field)) + + sample_counts.add(samples) + geometries.setdefault(n, set()).add((a1, b1, a2, b2)) + angular_leverage.setdefault(n, set()).add(row["delta_cos4"]) + batches_by_size.setdefault(n, set()).add(batch) + + if len(sample_counts) != 1: + raise ValueError("all aligned size/orientation batches must use one sample count") + for n, values in geometries.items(): + if len(values) != 1: + raise ValueError("N={} changes geometry across aligned batches".format(n)) + for n, values in angular_leverage.items(): + if len(values) != 1: + raise ValueError("N={} changes angular leverage across batches".format(n)) + common_batches = None + for n, values in batches_by_size.items(): + ordered = sorted(values) + if ordered != list(range(len(ordered))): + raise ValueError("N={} batch ids are not contiguous".format(n)) + if common_batches is None: + common_batches = ordered + elif ordered != common_batches: + raise ValueError("all sizes must have the same aligned batch ids") + assert common_batches is not None + + return { + "sizes": sorted(batches_by_size), + "batch_count": len(common_batches), + "samples_per_size_batch": next(iter(sample_counts)), + "geometry_by_N": { + str(n): list(next(iter(geometries[n]))) for n in sorted(geometries) + }, + } + + +def _mapping_by_size(value: object, sizes: Sequence[int], label: str) -> Dict[str, float]: + if not isinstance(value, dict): + raise ValueError("{} must be a mapping".format(label)) + expected = {str(size) for size in sizes} + if set(value) != expected: + raise ValueError("{} keys do not match sizes".format(label)) + return {key: _as_float(raw, "{} {}".format(label, key)) for key, raw in value.items()} + + +def validate_summary( + summary: Mapping[str, object], + max_condition: float, +) -> Dict[str, object]: + if summary.get("format_version") != 2: + raise ValueError("summary format_version must be 2") + raw_sizes = summary.get("sizes") + if not isinstance(raw_sizes, list) or not raw_sizes: + raise ValueError("summary sizes must be a nonempty list") + sizes = [int(value) for value in raw_sizes] + if len(set(sizes)) != len(sizes) or any(value <= 0 for value in sizes): + raise ValueError("summary sizes must be unique positive integers") + batch_count = int(summary.get("batch_count", 0)) + if batch_count < 2: + raise ValueError("summary batch_count must be at least two") + + raw_metrics = summary.get("metrics") + if not isinstance(raw_metrics, dict) or not raw_metrics: + raise ValueError("summary metrics must be a nonempty mapping") + metric_reports: Dict[str, object] = {} + for name, raw_metric in raw_metrics.items(): + if not isinstance(raw_metric, dict): + raise ValueError("metric {} must be a mapping".format(name)) + means = _mapping_by_size(raw_metric.get("means"), sizes, "{} means".format(name)) + standard_errors = _mapping_by_size( + raw_metric.get("standard_errors"), sizes, "{} standard_errors".format(name) + ) + covariance = _matrix( + raw_metric.get("covariance_of_means"), + "{} covariance_of_means".format(name), + ) + if len(covariance) != len(sizes) or any( + len(row) != len(sizes) for row in covariance + ): + raise ValueError("metric {} covariance dimension disagrees with sizes".format(name)) + diagnostics = covariance_diagnostics( + covariance, "metric {} covariance".format(name), max_condition + ) + for index, size in enumerate(sizes): + variance = covariance[index][index] + reported = standard_errors[str(size)] + if variance <= 0.0 or not math.isclose( + reported * reported, variance, rel_tol=1e-9, abs_tol=1e-300 + ): + raise ValueError("metric {} N={} SE disagrees with covariance".format(name, size)) + + correlation = _matrix( + raw_metric.get("correlation_of_batch_values"), + "{} correlation".format(name), + ) + if len(correlation) != len(sizes) or any( + len(row) != len(sizes) for row in correlation + ): + raise ValueError("metric {} correlation dimension disagrees with sizes".format(name)) + maximum_correlation_error = 0.0 + for i in range(len(sizes)): + for j in range(len(sizes)): + expected = covariance[i][j] / math.sqrt( + covariance[i][i] * covariance[j][j] + ) + maximum_correlation_error = max( + maximum_correlation_error, abs(correlation[i][j] - expected) + ) + if maximum_correlation_error > 1e-10: + raise ValueError("metric {} correlation disagrees with covariance".format(name)) + diagnostics["maximum_correlation_error"] = maximum_correlation_error + diagnostics["maximum_absolute_mean"] = max(abs(value) for value in means.values()) + metric_reports[str(name)] = diagnostics + + nonlinear = summary.get("nonlinear_estimator") + if not isinstance(nonlinear, dict) or nonlinear.get("root_gap_method") != "delete_one_jackknife_pseudovalues": + raise ValueError("summary must declare delete-one jackknife root-gap pseudo-values") + by_n = nonlinear.get("by_N") + if not isinstance(by_n, dict) or set(by_n) != {str(size) for size in sizes}: + raise ValueError("nonlinear by_N keys do not match sizes") + root_metric = raw_metrics.get("root_gap") + if not isinstance(root_metric, dict) or not isinstance(root_metric.get("means"), dict): + raise ValueError("root_gap metric is missing") + for size in sizes: + detail = by_n[str(size)] + if not isinstance(detail, dict): + raise ValueError("root detail N={} is invalid".format(size)) + if int(detail.get("delete_one_count", 0)) != batch_count: + raise ValueError("root detail N={} delete-one count disagrees".format(size)) + center = _as_float(detail.get("bias_corrected_estimate"), "root center") + metric_center = _as_float(root_metric["means"][str(size)], "root mean") + if not math.isclose(center, metric_center, rel_tol=1e-13, abs_tol=1e-300): + raise ValueError("root pseudo-value center disagrees at N={}".format(size)) + + audits = summary.get("constant_amplitude_audits") + if not isinstance(audits, dict) or set(audits) != {"A_M", "A_p"}: + raise ValueError("summary must contain A_M and A_p constant-amplitude audits") + audit_reports: Dict[str, object] = {} + for metric, modes in audits.items(): + if not isinstance(modes, dict) or set(modes) != { + "full_covariance", + "diagonal_covariance", + }: + raise ValueError("{} audit modes are incomplete".format(metric)) + audit_reports[metric] = {} + for mode, raw in modes.items(): + if not isinstance(raw, dict): + raise ValueError("{} {} audit is invalid".format(metric, mode)) + residual_covariance = _matrix( + raw.get("heldout_residual_covariance"), + "{} {} heldout residual covariance".format(metric, mode), + ) + diagnostics = covariance_diagnostics( + residual_covariance, + "{} {} heldout residual covariance".format(metric, mode), + max_condition, + ) + chi_square = _as_float(raw.get("heldout_chi_square"), "heldout chi-square") + dof = int(raw.get("heldout_dof", 0)) + if chi_square < 0.0 or dof != len(residual_covariance): + raise ValueError("{} {} heldout score metadata is invalid".format(metric, mode)) + diagnostics["heldout_chi_square"] = chi_square + diagnostics["heldout_dof"] = dof + audit_reports[metric][mode] = diagnostics + + return { + "format_version": 1, + "sizes": sizes, + "batch_count": batch_count, + "max_condition_allowed": max_condition, + "metric_covariance_diagnostics": metric_reports, + "heldout_residual_diagnostics": audit_reports, + } + + +def validate_archive( + batch_metrics: Path, + summary_path: Path, + max_condition: float, +) -> Dict[str, object]: + batch_report = validate_batch_rows(read_batch_rows(batch_metrics)) + summary = json.loads(summary_path.read_text(encoding="utf-8")) + if not isinstance(summary, dict): + raise ValueError("summary JSON must contain an object") + summary_report = validate_summary(summary, max_condition) + if batch_report["sizes"] != summary_report["sizes"]: + raise ValueError("batch and summary sizes disagree") + if batch_report["batch_count"] != summary_report["batch_count"]: + raise ValueError("batch and summary batch counts disagree") + return { + "format_version": 1, + "batch_contract": batch_report, + "summary_contract": summary_report, + } + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--batch-metrics", type=Path, required=True) + parser.add_argument("--summary", type=Path, required=True) + parser.add_argument("--max-condition", type=float, default=1e12) + parser.add_argument("--json", type=Path, required=True) + args = parser.parse_args() + if not math.isfinite(args.max_condition) or args.max_condition <= 1.0: + raise SystemExit("--max-condition must be finite and greater than one") + try: + result = validate_archive( + args.batch_metrics, args.summary, args.max_condition + ) + except (OSError, ValueError, json.JSONDecodeError) as exc: + raise SystemExit(str(exc)) from exc + args.json.parent.mkdir(parents=True, exist_ok=True) + args.json.write_text(json.dumps(result, indent=2) + "\n", encoding="utf-8") + print(json.dumps(result, indent=2)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tests/test_threshold_rank_covariance_archive.py b/tests/test_threshold_rank_covariance_archive.py new file mode 100644 index 000000000..6b3da854f --- /dev/null +++ b/tests/test_threshold_rank_covariance_archive.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +import copy +from pathlib import Path +import sys +import unittest + + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / "scripts")) + +from validate_threshold_rank_covariance_archive import ( # noqa: E402 + covariance_diagnostics, + read_batch_rows, + validate_archive, + validate_batch_rows, +) + + +ARCHIVE = ROOT / "results" / "server-20260828" / "P33-cross-size-covariance" + + +class ThresholdRankCovarianceArchiveTests(unittest.TestCase): + def test_committed_archive_satisfies_contracts(self) -> None: + result = validate_archive( + ARCHIVE / "batch_metrics.csv", + ARCHIVE / "summary.json", + 1e12, + ) + batch = result["batch_contract"] + self.assertEqual(batch["sizes"], [65, 85, 130, 145, 170]) + self.assertEqual(batch["batch_count"], 100) + self.assertEqual(batch["samples_per_size_batch"], 100000) + metrics = result["summary_contract"]["metric_covariance_diagnostics"] + self.assertIn("root_gap", metrics) + self.assertLess(metrics["root_gap"]["infinity_norm_condition"], 10.0) + + def test_batch_contract_rejects_sample_or_geometry_drift(self) -> None: + rows = read_batch_rows(ARCHIVE / "batch_metrics.csv")[:10] + + changed_samples = copy.deepcopy(rows) + changed_samples[1]["samples"] = "99999" + with self.assertRaisesRegex(ValueError, "one sample count"): + validate_batch_rows(changed_samples) + + changed_geometry = copy.deepcopy(rows) + changed_geometry[5]["a1"] = "7" + changed_geometry[5]["b1"] = "4" + with self.assertRaisesRegex( + ValueError, "Gaussian norm|changes geometry|identical orientations" + ): + validate_batch_rows(changed_geometry) + + def test_covariance_contract_rejects_indefinite_or_ill_conditioned_input(self) -> None: + with self.assertRaisesRegex(ValueError, "positive definite"): + covariance_diagnostics( + [[1.0, 2.0], [2.0, 1.0]], + "indefinite", + 1e12, + ) + with self.assertRaisesRegex(ValueError, "condition number"): + covariance_diagnostics( + [[1.0, 0.0], [0.0, 1e-14]], + "ill-conditioned", + 1e12, + ) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_threshold_rank_cross_size_covariance.py b/tests/test_threshold_rank_cross_size_covariance.py new file mode 100644 index 000000000..bfec5bc99 --- /dev/null +++ b/tests/test_threshold_rank_cross_size_covariance.py @@ -0,0 +1,112 @@ +from __future__ import annotations + +import math +from pathlib import Path +import sys +import unittest + + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / "scripts")) + +from audit_threshold_rank_covariance import ( # noqa: E402 + _orientation_batches, + constant_heldout_audit, + covariance_of_mean, + jackknife_pseudovalues, +) +from validate_threshold_rank_covariance_archive import validate_archive # noqa: E402 + + +ARCHIVE = ROOT / "results" / "server-20260828" / "P33-cross-size-covariance" + + +class ThresholdRankCrossSizeCovarianceTests(unittest.TestCase): + def test_covariance_is_for_the_mean_not_raw_batches(self) -> None: + means, covariance = covariance_of_mean( + [ + [1.0, 2.0], + [2.0, 4.0], + [3.0, 6.0], + [4.0, 8.0], + ] + ) + self.assertEqual(means, [2.5, 5.0]) + self.assertAlmostEqual(covariance[0][0], 5.0 / 12.0) + self.assertAlmostEqual(covariance[0][1], 5.0 / 6.0) + self.assertAlmostEqual(covariance[1][1], 5.0 / 3.0) + + def test_jackknife_pseudovalues_preserve_full_center(self) -> None: + pseudo = jackknife_pseudovalues(10.0, [9.0, 10.0, 11.0]) + self.assertEqual(pseudo, [12.0, 10.0, 8.0]) + self.assertAlmostEqual(sum(pseudo) / len(pseudo), 10.0) + + def test_constant_heldout_score_propagates_training_covariance(self) -> None: + sizes = [65, 85, 130, 145, 170] + values = [0.80, 0.82, 0.79, 0.81, 0.77] + variances = [0.01**2, 0.012**2, 0.015**2, 0.02**2, 0.025**2] + covariance = [ + [ + variances[i] + if i == j + else 0.1 * math.sqrt(variances[i] * variances[j]) + for j in range(len(sizes)) + ] + for i in range(len(sizes)) + ] + result = constant_heldout_audit( + values, + covariance, + sizes, + [65, 85, 130], + [145, 170], + ) + self.assertEqual(result["heldout_dof"], 2) + self.assertAlmostEqual(sum(result["training_weights"]), 1.0) + self.assertGreater(result["amplitude_se"], 0.0) + self.assertTrue(math.isfinite(result["heldout_chi_square"])) + residual_covariance = result["heldout_residual_covariance"] + self.assertNotEqual(residual_covariance[0][1], 0.0) + + def test_alignment_requires_same_batches_for_every_size(self) -> None: + def record(n: int, orientation: str, batch: int) -> dict: + return { + "n": n, + "orientation": orientation, + "batch": batch, + "samples": 10, + } + + records = {} + for n in (65, 85): + for orientation in ("first", "second"): + for batch in (0, 1): + records[(n, orientation, batch)] = record( + n, orientation, batch + ) + sizes, batches, _grouped = _orientation_batches(records) + self.assertEqual(sizes, [65, 85]) + self.assertEqual(batches, [0, 1]) + + del records[(85, "second", 1)] + with self.assertRaisesRegex(ValueError, "aligned batch ids"): + _orientation_batches(records) + + def test_committed_archive_has_stable_design_and_positive_covariance(self) -> None: + result = validate_archive( + ARCHIVE / "batch_metrics.csv", + ARCHIVE / "summary.json", + 1e12, + ) + batch = result["batch_contract"] + self.assertEqual(batch["sizes"], [65, 85, 130, 145, 170]) + self.assertEqual(batch["batch_count"], 100) + self.assertEqual(batch["samples_per_size_batch"], 100000) + root = result["summary_contract"]["metric_covariance_diagnostics"][ + "root_gap" + ] + self.assertLess(root["infinity_norm_condition"], 10.0) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_threshold_rank_root_doubling.py b/tests/test_threshold_rank_root_doubling.py new file mode 100644 index 000000000..186d53a11 --- /dev/null +++ b/tests/test_threshold_rank_root_doubling.py @@ -0,0 +1,69 @@ +from __future__ import annotations + +from pathlib import Path +import sys +import unittest + + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / "scripts")) + +from score_threshold_rank_root_doubling import score # noqa: E402 + + +class ThresholdRankRootDoublingTests(unittest.TestCase): + def test_exact_lineage_relation_has_zero_residual(self) -> None: + sizes = [65, 85, 130, 145, 170] + values = [-4.0, -8.0, -1.0, 0.5, -2.0] + covariance = [ + [0.01 if i == j else 0.0 for j in range(len(sizes))] + for i in range(len(sizes)) + ] + summary = { + "format_version": 2, + "sizes": sizes, + "nonlinear_estimator": { + "root_gap_method": "delete_one_jackknife_pseudovalues" + }, + "metrics": { + "root_gap": { + "means": dict(zip(map(str, sizes), values)), + "covariance_of_means": covariance, + } + }, + } + result = score(summary) + full = result["full_cross_size_covariance"] + self.assertEqual(full["target_ratio"], -0.25) + self.assertAlmostEqual(full["lineages"][0]["observed_ratio"], -0.25) + self.assertAlmostEqual(full["lineages"][1]["observed_ratio"], -0.25) + self.assertAlmostEqual(full["joint_residual_chi_square"], 0.0) + + def test_full_and_diagonal_scores_are_both_retained(self) -> None: + sizes = [65, 85, 130, 145, 170] + values = [-4.0, -8.0, -1.1, 0.5, -1.8] + covariance = [ + [0.04 if i == j else 0.01 for j in range(len(sizes))] + for i in range(len(sizes)) + ] + summary = { + "format_version": 2, + "sizes": sizes, + "metrics": { + "root_gap": { + "means": dict(zip(map(str, sizes), values)), + "covariance_of_means": covariance, + } + }, + } + result = score(summary) + self.assertIn("full_cross_size_covariance", result) + self.assertIn("diagonal_cross_size_covariance", result) + self.assertNotEqual( + result["full_cross_size_covariance"]["joint_residual_chi_square"], + result["diagonal_cross_size_covariance"]["joint_residual_chi_square"], + ) + + +if __name__ == "__main__": + unittest.main() From cf37bdcd38b7dabc8ff00f64967f9d28a6a5de1e Mon Sep 17 00:00:00 2001 From: LightChainr Date: Fri, 28 Aug 2026 21:38:38 +0800 Subject: [PATCH 2/2] Accept both ill-conditioned covariance rejection paths --- tests/test_threshold_rank_covariance_archive.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/test_threshold_rank_covariance_archive.py b/tests/test_threshold_rank_covariance_archive.py index 6b3da854f..5d591d2a8 100644 --- a/tests/test_threshold_rank_covariance_archive.py +++ b/tests/test_threshold_rank_covariance_archive.py @@ -58,7 +58,12 @@ def test_covariance_contract_rejects_indefinite_or_ill_conditioned_input(self) - "indefinite", 1e12, ) - with self.assertRaisesRegex(ValueError, "condition number"): + # Depending on pivot tolerance, an extreme condition number may be + # rejected while inverting the matrix or by the explicit condition + # limit. Both are acceptable fail-closed outcomes for this diagnostic. + with self.assertRaisesRegex( + ValueError, "condition number|singular or numerically unresolved" + ): covariance_diagnostics( [[1.0, 0.0], [0.0, 1e-14]], "ill-conditioned",