Current task: —

E-024-theta-sweep.py

Experiments: E-024 · script updated 08-19-2026

E-024-theta-sweep.csv — 700.6 KB, updated 08-19-2026

← prev page 10 of 30 · 500/page · 14949 rows next →
# atheta_over_pikz_kw_k
4502 8 0.3333 590 231.971755522452 1.1563517496e+00
4503 8 0.3333 591 232.222154393844 1.0545281630e-01
4504 8 0.3333 592 232.704145418093 1.9216500903e-01
4505 8 0.3333 593 233.058999514375 8.1518256601e-02
4506 8 0.3333 594 233.546751731909 1.8150939769e-01
4507 8 0.3333 595 233.715092312249 9.5615261820e-01
4508 8 0.3333 596 234.230673073345 7.6673480326e-02
4509 8 0.3333 597 234.670413545471 9.5446743185e-02
4510 8 0.3333 598 234.958683050897 1.7943472740e-01
4511 8 0.3333 599 235.420375375343 7.7229634902e-02
4512 8 0.3333 600 235.855002999917 1.0114541097e-01
4513 8 0.3333 601 236.148177675478 1.8481568889e-01
4514 8 0.3333 602 236.531286163957 1.0743116882e+00
4515 8 0.3333 603 236.908059190359 1.9698344079e-01
4516 8 0.3333 604 237.360717555256 7.9688289562e-02
4517 8 0.3333 605 237.769615608293 1.0746656604e+00
4518 8 0.3333 606 238.161807611792 8.1356186904e-02
4519 8 0.3333 607 238.568248735492 7.4784197280e-02
4520 8 0.3333 608 238.982893048850 7.7827343795e-02
4521 8 0.3333 609 239.482321805906 6.2775710297e-01
4522 8 0.3333 610 239.604086112438 6.5833852966e-01
4523 8 0.3333 611 240.130368080946 8.0318196897e-02
4524 8 0.3333 612 240.533692586442 8.3214016321e-02
4525 8 0.3333 613 241.038304549001 1.1291398161e+00
4526 8 0.3333 614 241.225884944941 1.5947385462e-01
4527 8 0.3333 615 241.691006800685 7.6600805795e-02
4528 8 0.3333 616 242.094824610427 7.9327567290e-02
4529 8 0.3333 617 242.474922020685 2.3896423795e-01
4530 8 0.3333 618 242.828727935802 1.0692066477e+00
4531 8 0.3333 619 243.328688932354 2.2319860631e-01
4532 8 0.3333 620 243.650856940845 8.8597723949e-02
4533 8 0.3333 621 244.069943121944 1.0798305294e+00
4534 8 0.3333 622 244.452384180997 7.6440117790e-02
4535 8 0.3333 623 244.864652793146 2.4607367335e-01
4536 8 0.3333 624 245.246809590831 7.6166465696e-02
4537 8 0.3333 625 245.637699933693 8.0502341511e-02
4538 8 0.3333 626 246.041014997350 8.0818302340e-02
4539 8 0.3333 627 246.448291974957 7.7794434390e-02
4540 8 0.3333 628 246.843938905983 2.6650930070e-01
4541 8 0.3333 629 247.145226962039 1.0575055888e+00
4542 8 0.3333 630 247.625389021279 8.6593080278e-02
4543 8 0.3333 631 248.093470524092 1.0612670514e+00
4544 8 0.3333 632 248.416747529850 2.7064999552e-01
4545 8 0.3333 633 248.769160274824 8.4082857914e-02
4546 8 0.3333 634 249.187639922482 8.3056577953e-02
4547 8 0.3333 635 249.575245599248 1.0864548349e+00
4548 8 0.3333 636 249.912719012006 2.5498962316e-01
4549 8 0.3333 637 250.372920591379 8.2118377389e-02
4550 8 0.3333 638 250.837803385037 1.4460794810e-01
4551 8 0.3333 639 251.032238247087 1.0090467653e+00
4552 8 0.3333 640 251.535348270888 8.3011958583e-02
4553 8 0.3333 641 251.980727390897 2.8321130646e-01
4554 8 0.3333 642 252.416037686544 2.2246172545e-01
4555 8 0.3333 643 252.655651828251 1.3634726083e-01
4556 8 0.3333 644 253.072875864572 1.0790881192e+00
4557 8 0.3333 645 253.506456491397 8.2122646840e-02
4558 8 0.3333 646 253.918620035113 8.6841653269e-02
4559 8 0.3333 647 254.384371891909 2.4413413372e-01
4560 8 0.3333 648 254.638729287208 1.2667310395e-01
4561 8 0.3333 649 255.180052998431 3.0797291479e-01
4562 8 0.3333 650 255.325038832693 1.0696185081e+00
4563 8 0.3333 651 255.855262964067 9.4713173150e-02
4564 8 0.3333 652 256.364525890256 1.0115455465e+00
4565 8 0.3333 653 256.570857582791 1.3783951516e-01
4566 8 0.3333 654 257.013303149122 9.2144909821e-02
4567 8 0.3333 655 257.425329924328 8.0383353328e-02
4568 8 0.3333 656 257.824890532861 8.4281119530e-02
4569 8 0.3333 657 258.256402452339 3.1570876945e-01
4570 8 0.3333 658 258.610809756618 1.0888700356e+00
4571 8 0.3333 659 259.032600822597 8.9343914279e-02
4572 8 0.3333 660 259.369270306688 3.1988963672e-01
4573 8 0.3333 661 259.869691831483 1.0804659144e+00
4574 8 0.3333 662 260.280458368071 3.1659076063e-01
4575 8 0.3333 663 260.629849538978 2.0128064791e-01
4576 8 0.3333 664 260.827285925888 9.7161160047e-01
4577 8 0.3333 665 261.347964330892 9.3608978597e-02
4578 8 0.3333 666 261.756152532945 8.4193819562e-02
4579 8 0.3333 667 262.118112187195 3.4660518106e-01
4580 8 0.3333 668 262.547618701513 9.1255738564e-02
4581 8 0.3333 669 262.962113002821 8.6661735128e-02
4582 8 0.3333 670 263.446149633840 2.4827057991e-01
4583 8 0.3333 671 263.597822150229 1.1828181207e+00
4584 8 0.3333 672 264.104362672418 9.6544550423e-02
4585 8 0.3333 673 264.524184154427 8.7260061386e-02
4586 8 0.3333 674 264.970380682992 3.7024690463e-01
4587 8 0.3333 675 265.373373389914 1.6518995256e-01
4588 8 0.3333 676 265.577525387615 9.9901575559e-01
4589 8 0.3333 677 266.095255805705 9.0159293722e-02
4590 8 0.3333 678 266.599480069480 1.0579882727e+00
4591 8 0.3333 679 266.927266929193 2.9587824925e-01
4592 8 0.3333 680 267.163265814314 2.0424716620e-01
4593 8 0.3333 681 267.683959420420 1.3006479632e-01
4594 8 0.3333 682 267.936563537940 1.0448247612e+00
4595 8 0.3333 683 268.506040758294 3.1225179588e-01
4596 8 0.3333 684 268.726469792151 1.6582363963e-01
4597 8 0.3333 685 269.195885876061 9.1081436683e-02
4598 8 0.3333 686 269.611863469011 8.8109895433e-02
4599 8 0.3333 687 269.973420459139 1.0912012761e+00
4600 8 0.3333 688 270.375484649751 4.1345513778e-01
4601 8 0.3333 689 270.805171220929 9.6312311654e-02
4602 8 0.3333 690 271.178442877001 4.2887410395e-01
4603 8 0.3333 691 271.502628720954 1.0836419444e+00
4604 8 0.3333 692 271.982689233284 9.5102767808e-02
4605 8 0.3333 693 272.318714039779 4.2492270463e-01
4606 8 0.3333 694 272.760033461181 9.4129998458e-02
4607 8 0.3333 695 273.175351212332 1.0416924124e-01
4608 8 0.3333 696 273.468492835833 1.0698145711e+00
4609 8 0.3333 697 273.941116292814 9.9402217060e-02
4610 8 0.3333 698 274.343806159264 9.5921413723e-02
4611 8 0.3333 699 274.808311146986 4.4897917965e-01
4612 8 0.3333 700 275.122353607288 1.0162478016e-01
4613 8 0.3333 701 275.580659871973 1.0838095638e+00
4614 8 0.3333 702 275.924009980050 1.0570968678e-01
4615 8 0.3333 703 276.431418887456 1.3540277507e+00
4616 8 0.3333 704 276.607722057411 2.0229519581e-01
4617 8 0.3333 705 277.087326648185 9.2793225381e-02
4618 8 0.3333 706 277.485188610360 9.9761846780e-02
4619 8 0.3333 707 277.906789533241 4.9708021377e-01
4620 8 0.3333 708 278.255204099094 1.0909569189e+00
4621 8 0.3333 709 278.752283481056 1.4076308931e-01
4622 8 0.3333 710 279.085493757204 7.7172463430e-01
4623 8 0.3333 711 279.285367873365 7.5820335313e-01
4624 8 0.3333 712 279.816915638835 1.0651566905e-01
4625 8 0.5000 1 0.483430243703 6.4434526695e-02
4626 8 0.5000 2 0.883221278935 6.3169440450e-02
4627 8 0.5000 3 1.278967622464 6.2855279477e-02
4628 8 0.5000 4 1.673457505534 6.2730737390e-02
4629 8 0.5000 5 2.067393271700 6.2669117113e-02
4630 8 0.5000 6 2.461036302571 6.2634254524e-02
4631 8 0.5000 7 2.854506637439 6.2612655421e-02
4632 8 0.5000 8 3.247866486206 6.2598578128e-02
4633 8 0.5000 9 3.641152958759 6.2588643503e-02
4634 8 0.5000 10 4.034385322000 6.2581682483e-02
4635 8 0.5000 11 4.427584622379 6.2577473558e-02
4636 8 0.5000 12 4.820756804146 6.2573096333e-02
4637 8 0.5000 13 5.213905828499 6.2570411039e-02
4638 8 0.5000 14 5.607046714345 6.2570380793e-02
4639 8 0.5000 15 6.000183107205 6.2567856234e-02
4640 8 0.5000 16 6.393300771597 6.2566535152e-02
4641 8 0.5000 17 6.786424415159 6.2567669822e-02
4642 8 0.5000 18 7.179545037822 6.2567395281e-02
4643 8 0.5000 19 7.572678046105 6.2569628044e-02
4644 8 0.5000 20 7.965807484554 6.2568165934e-02
4645 8 0.5000 21 8.358949335793 6.2572244963e-02
4646 8 0.5000 22 8.752100964680 6.2572473576e-02
4647 8 0.5000 23 9.145281580732 6.2580722534e-02
4648 8 0.5000 24 9.538488602136 6.2580239685e-02
4649 8 0.5000 25 9.931709705484 6.2587382632e-02
4650 8 0.5000 26 10.324981490049 6.2594978445e-02
4651 8 0.5000 27 10.718319345097 6.2608906744e-02
4652 8 0.5000 28 11.111733973840 6.2619256631e-02
4653 8 0.5000 29 11.505262605770 6.2647934624e-02
4654 8 0.5000 30 11.898989546569 6.2679322724e-02
4655 8 0.5000 31 12.292989360691 6.2744467129e-02
4656 8 0.5000 32 12.687578531012 6.2869962402e-02
4657 8 0.5000 33 13.083382571581 6.3170729876e-02
4658 8 0.5000 34 13.482892243788 6.4278307703e-02
4659 8 0.5000 35 13.914941157015 8.8682436570e-02
4660 8 0.5000 36 14.144548511040 1.0288005795e+00
4661 8 0.5000 37 14.628501403625 6.4594403211e-02
4662 8 0.5000 38 15.028943602896 6.3235761621e-02
4663 8 0.5000 39 15.424982945187 6.2892005618e-02
4664 8 0.5000 40 15.819717662427 6.2771993573e-02
4665 8 0.5000 41 16.213900381441 6.2706431330e-02
4666 8 0.5000 42 16.607773326311 6.2671456110e-02
4667 8 0.5000 43 17.001482242193 6.2654816523e-02
4668 8 0.5000 44 17.395129392984 6.2645483724e-02
4669 8 0.5000 45 17.788705317570 6.2639253031e-02
4670 8 0.5000 46 18.182313319621 6.2650244243e-02
4671 8 0.5000 47 18.575977718020 6.2660691112e-02
4672 8 0.5000 48 18.969770808016 6.2688969124e-02
4673 8 0.5000 49 19.363753687248 6.2727982613e-02
4674 8 0.5000 50 19.758153927990 6.2825227594e-02
4675 8 0.5000 51 20.153454858875 6.3046714520e-02
4676 8 0.5000 52 20.551791307702 6.4021170991e-02
4677 8 0.5000 53 21.015814271144 1.0488209154e+00
4678 8 0.5000 54 21.298789835005 7.1502677403e-02
4679 8 0.5000 55 21.710488594461 6.3630371393e-02
4680 8 0.5000 56 22.107935899290 6.3037290515e-02
4681 8 0.5000 57 22.503393412394 6.2873312882e-02
4682 8 0.5000 58 22.898329848549 6.2860330398e-02
4683 8 0.5000 59 23.293435976066 6.2910204668e-02
4684 8 0.5000 60 23.689070765848 6.3058696970e-02
4685 8 0.5000 61 24.086402584290 6.3489909790e-02
4686 8 0.5000 62 24.489164625851 6.5178944054e-02
4687 8 0.5000 63 24.993587823140 9.6510379956e-01
4688 8 0.5000 64 25.157474625377 1.4986958649e-01
4689 8 0.5000 65 25.624191449151 6.5062192967e-02
4690 8 0.5000 66 26.026558088851 6.3448601430e-02
4691 8 0.5000 67 26.423674862388 6.3034507261e-02
4692 8 0.5000 68 26.819070981992 6.2846359859e-02
4693 8 0.5000 69 27.213682061775 6.2793817531e-02
4694 8 0.5000 70 27.608184428020 6.2765329825e-02
4695 8 0.5000 71 28.002281666547 6.2701615990e-02
4696 8 0.5000 72 28.396372682419 6.2740457667e-02
4697 8 0.5000 73 28.790516438598 6.2738243008e-02
4698 8 0.5000 74 29.184933208069 6.2828173191e-02
4699 8 0.5000 75 29.579967670810 6.2926725465e-02
4700 8 0.5000 76 29.976565522717 6.3518850380e-02
4701 8 0.5000 77 30.421008897186 1.0574088094e+00
4702 8 0.5000 78 30.746876169956 6.5564587821e-02
4703 8 0.5000 79 31.148559546310 6.3329291684e-02
4704 8 0.5000 80 31.545943860965 6.3256300861e-02
4705 8 0.5000 81 31.944314243503 6.3657026899e-02
4706 8 0.5000 82 32.348395710727 6.5477613867e-02
4707 8 0.5000 83 32.843679543358 2.9211395140e-01
4708 8 0.5000 84 32.964578100154 8.2174734656e-01
4709 8 0.5000 85 33.479000728839 6.5461721129e-02
4710 8 0.5000 86 33.882899073921 6.3618478215e-02
4711 8 0.5000 87 34.280733041931 6.3117940716e-02
4712 8 0.5000 88 34.676776975425 6.3005342945e-02
4713 8 0.5000 89 35.072328120050 6.2882978858e-02
4714 8 0.5000 90 35.467256689370 6.2884837145e-02
4715 8 0.5000 91 35.862662118546 6.2977010260e-02
4716 8 0.5000 92 36.258427199997 6.3081167723e-02
4717 8 0.5000 93 36.656188665143 6.3606899014e-02
4718 8 0.5000 94 37.059449815266 6.5253941982e-02
4719 8 0.5000 95 37.566815017015 9.4309470352e-01
4720 8 0.5000 96 37.719584781012 1.7159493634e-01
4721 8 0.5000 97 38.193183523210 6.5162758297e-02
4722 8 0.5000 98 38.595941554797 6.3514224727e-02
4723 8 0.5000 99 38.993408813294 6.3083612268e-02
4724 8 0.5000 100 39.389043895444 6.2901304839e-02
4725 8 0.5000 101 39.784160111096 6.2879424502e-02
4726 8 0.5000 102 40.179317124453 6.2974472043e-02
4727 8 0.5000 103 40.576836473458 6.4026150663e-02
4728 8 0.5000 104 40.921530160549 1.0598071040e+00
4729 8 0.5000 105 41.353974507367 6.3169834612e-02
4730 8 0.5000 106 41.749359567381 6.2846863702e-02
4731 8 0.5000 107 42.143768853133 6.2730574241e-02
4732 8 0.5000 108 42.537382696888 6.2652989675e-02
4733 8 0.5000 109 42.931201471964 6.2701802770e-02
4734 8 0.5000 110 43.326942445801 1.0626069031e+00
4735 8 0.5000 111 43.718309689869 6.2690294039e-02
4736 8 0.5000 112 44.112102004424 6.2701243738e-02
4737 8 0.5000 113 44.505767128053 6.2631167238e-02
4738 8 0.5000 114 44.899085624743 6.2650083820e-02
4739 8 0.5000 115 45.292849778160 6.2744469724e-02
4740 8 0.5000 116 45.686762049903 6.2643723070e-02
4741 8 0.5000 117 46.080316304967 6.2697140582e-02
4742 8 0.5000 118 46.474293249518 6.2796228382e-02
4743 8 0.5000 119 46.868974933414 6.2855876164e-02
4744 8 0.5000 120 47.263908648895 6.2908752606e-02
4745 8 0.5000 121 47.661584216480 6.4147772953e-02
4746 8 0.5000 122 48.007952345285 1.0601193216e+00
4747 8 0.5000 123 48.441911622116 6.3614220814e-02
4748 8 0.5000 124 48.841624121775 6.3782217637e-02
4749 8 0.5000 125 49.245589681277 6.5436446945e-02
4750 8 0.5000 126 49.754137089869 9.4004280102e-01
4751 8 0.5000 127 49.905836028779 1.7480695604e-01
4752 8 0.5000 128 50.381212632940 6.5314542090e-02
4753 8 0.5000 129 50.784936943554 6.3708855667e-02
4754 8 0.5000 130 51.184220049394 6.3478113222e-02
4755 8 0.5000 131 51.581995405413 6.3359869405e-02
4756 8 0.5000 132 51.981013337834 6.3783340475e-02
4757 8 0.5000 133 52.386003703508 6.5683185980e-02
4758 8 0.5000 134 52.885373141601 3.2305099577e-01
4759 8 0.5000 135 53.002385200492 7.9098724896e-01
4760 8 0.5000 136 53.518218193390 6.5689106520e-02
4761 8 0.5000 137 53.922767480636 6.3700424720e-02
4762 8 0.5000 138 54.321669521875 6.3423866313e-02
4763 8 0.5000 139 54.719321372521 6.3316622914e-02
4764 8 0.5000 140 55.116695700199 6.3313058753e-02
4765 8 0.5000 141 55.515354043044 6.3705542802e-02
4766 8 0.5000 142 55.919286623954 6.5528718986e-02
4767 8 0.5000 143 56.427270849600 9.4814494107e-01
4768 8 0.5000 144 56.582907147479 1.6695512156e-01
4769 8 0.5000 145 57.056162450588 6.5272986641e-02
4770 8 0.5000 146 57.460127858789 6.3813296886e-02
4771 8 0.5000 147 57.859336840003 6.3379927136e-02
4772 8 0.5000 148 58.257265518963 6.3607322035e-02
4773 8 0.5000 149 58.657873459073 6.4127195487e-02
4774 8 0.5000 150 59.073465258904 7.2982764183e-02
4775 8 0.5000 151 59.353685719167 1.0481660148e+00
4776 8 0.5000 152 59.825279078358 6.5206668823e-02
4777 8 0.5000 153 60.234675770897 6.5915980775e-02
4778 8 0.5000 154 60.724956914547 2.3817357474e-01
4779 8 0.5000 155 60.857043701850 8.7657561296e-01
4780 8 0.5000 156 61.371138662895 6.5695330449e-02
4781 8 0.5000 157 61.775817731418 6.3812096919e-02
4782 8 0.5000 158 62.174282845077 6.3350408841e-02
4783 8 0.5000 159 62.571790217284 6.3210610190e-02
4784 8 0.5000 160 62.967838818734 6.2988299266e-02
4785 8 0.5000 161 63.364301790165 6.3254182258e-02
4786 8 0.5000 162 63.761718029235 6.3429896226e-02
4787 8 0.5000 163 64.160439574621 6.4083046131e-02
4788 8 0.5000 164 64.565674981490 6.5692851868e-02
4789 8 0.5000 165 65.081886797243 8.1019678218e-01
4790 8 0.5000 166 65.201804717858 3.0420209018e-01
4791 8 0.5000 167 65.701528710890 6.6271097987e-02
4792 8 0.5000 168 66.109708714090 6.4544263429e-02
4793 8 0.5000 169 66.517798244594 6.6212520969e-02
4794 8 0.5000 170 67.035894883475 6.4969108982e-01
4795 8 0.5000 171 67.142841056213 4.6446924284e-01
4796 8 0.5000 172 67.653653300607 6.5970059213e-02
4797 8 0.5000 173 68.059532022323 6.4115975929e-02
4798 8 0.5000 174 68.459637550083 6.3761013871e-02
4799 8 0.5000 175 68.860483577622 6.4225794692e-02
4800 8 0.5000 176 69.276247756982 7.3573823640e-02
4801 8 0.5000 177 69.553127146424 1.0469739858e+00
4802 8 0.5000 178 70.021956438576 6.4373485686e-02
4803 8 0.5000 179 70.421754361845 6.3252432945e-02
4804 8 0.5000 180 70.818330882579 6.3570618484e-02
4805 8 0.5000 181 71.215578996424 6.3269636625e-02
4806 8 0.5000 182 71.612731279558 6.3920229151e-02
4807 8 0.5000 183 72.062817624406 1.0564076704e+00
4808 8 0.5000 184 72.381155737325 6.6585722899e-02
4809 8 0.5000 185 72.783080228426 6.3368756865e-02
4810 8 0.5000 186 73.179513485930 6.3178315000e-02
4811 8 0.5000 187 73.575724360694 6.3035475484e-02
4812 8 0.5000 188 73.971655237498 6.3268200834e-02
4813 8 0.5000 189 74.368468632091 6.3285403241e-02
4814 8 0.5000 190 74.765461516382 6.3837796715e-02
4815 8 0.5000 191 75.170293246927 6.5546095945e-02
4816 8 0.5000 192 75.681632872770 9.0156278195e-01
4817 8 0.5000 193 75.819725171051 2.1306561909e-01
4818 8 0.5000 194 76.304024925061 6.5939251747e-02
4819 8 0.5000 195 76.710043571138 6.4275864895e-02
4820 8 0.5000 196 77.142390437146 1.0612435783e+00
4821 8 0.5000 197 77.497002687122 6.4501048676e-02
4822 8 0.5000 198 77.896968562816 6.3465539506e-02
4823 8 0.5000 199 78.294882127219 6.3600674375e-02
4824 8 0.5000 200 78.697712821981 6.5187639243e-02
4825 8 0.5000 201 79.141195478170 1.0232699705e-01
4826 8 0.5000 202 79.349257478117 1.0147464747e+00
4827 8 0.5000 203 79.842680629538 6.5256854376e-02
4828 8 0.5000 204 80.244785818124 6.3693829680e-02
4829 8 0.5000 205 80.640889585359 6.3385647893e-02
4830 8 0.5000 206 81.038005714107 6.3346032078e-02
4831 8 0.5000 207 81.433105434553 6.3505840525e-02
4832 8 0.5000 208 81.830985057382 6.3397580942e-02
4833 8 0.5000 209 82.230210310463 6.4100127127e-02
4834 8 0.5000 210 82.650014474674 7.6549273927e-02
4835 8 0.5000 211 82.917697358334 1.0443802815e+00
4836 8 0.5000 212 83.391691945310 6.4972992107e-02
4837 8 0.5000 213 83.795201908059 6.4437554571e-02
4838 8 0.5000 214 84.200414105412 6.6195867927e-02
4839 8 0.5000 215 84.713206358396 9.1147769182e-01
4840 8 0.5000 216 84.854401955962 2.0341837126e-01
4841 8 0.5000 217 85.337732079043 6.5715733313e-02
4842 8 0.5000 218 85.742939314463 6.4032073379e-02
4843 8 0.5000 219 86.141800128822 6.3512520739e-02
4844 8 0.5000 220 86.540097835990 6.4325523592e-02
4845 8 0.5000 221 86.942613281091 6.4693181887e-02
4846 8 0.5000 222 87.417604471637 1.0425565417e+00
4847 8 0.5000 223 87.680765196330 7.8328493646e-02
4848 8 0.5000 224 88.103535549875 6.5585688007e-02
4849 8 0.5000 225 88.516308892557 6.9707168539e-02
4850 8 0.5000 226 88.814633941442 1.0524072189e+00
4851 8 0.5000 227 89.274491310366 6.4365198851e-02
4852 8 0.5000 228 89.674495348825 6.3621518089e-02
4853 8 0.5000 229 90.068874620305 6.3355111184e-02
4854 8 0.5000 230 90.464423937638 6.3276037282e-02
4855 8 0.5000 231 90.860419951570 6.3082917094e-02
4856 8 0.5000 232 91.255958637079 6.4069217393e-02
4857 8 0.5000 233 91.651498002638 6.3273641202e-02
4858 8 0.5000 234 92.048846673043 6.3564747309e-02
4859 8 0.5000 235 92.488513276073 1.0590672734e+00
4860 8 0.5000 236 92.822623859887 6.5764479798e-02
4861 8 0.5000 237 93.224780398557 6.3785229162e-02
4862 8 0.5000 238 93.623571635461 6.3581514020e-02
4863 8 0.5000 239 94.026518442507 6.5780379888e-02
4864 8 0.5000 240 94.490594502506 1.3454240148e-01
4865 8 0.5000 241 94.667019981695 9.8280356155e-01
4866 8 0.5000 242 95.173314079106 6.6444558265e-02
4867 8 0.5000 243 95.596636439836 7.5251023551e-02
4868 8 0.5000 244 95.877381280007 1.0478771541e+00
4869 8 0.5000 245 96.346718467539 6.4636740565e-02
4870 8 0.5000 246 96.747825770485 6.3781763790e-02
4871 8 0.5000 247 97.146373900409 6.3342667219e-02
4872 8 0.5000 248 97.541084026906 6.4410626387e-02
4873 8 0.5000 249 97.941250774524 6.3683306993e-02
4874 8 0.5000 250 98.343419050229 6.5474161789e-02
4875 8 0.5000 251 98.822263357235 1.0364112359e+00
4876 8 0.5000 252 99.066888575547 8.3269028890e-02
4877 8 0.5000 253 99.496473539670 6.4965718469e-02
4878 8 0.5000 254 99.899721957683 6.5270342655e-02
4879 8 0.5000 255 100.300428242136 6.5421927313e-02
4880 8 0.5000 256 100.701916019549 6.5664779839e-02
4881 8 0.5000 257 101.172737961938 1.5436723597e-01
4882 8 0.5000 258 101.335631300292 9.6137769669e-01
4883 8 0.5000 259 101.843228980096 6.5996224889e-02
4884 8 0.5000 260 102.247432698991 6.4044493856e-02
4885 8 0.5000 261 102.647039474526 6.3873232166e-02
4886 8 0.5000 262 103.050116493049 6.5528019789e-02
4887 8 0.5000 263 103.467208610798 7.7442306345e-02
4888 8 0.5000 264 103.733076277332 1.0433822239e+00
4889 8 0.5000 265 104.208575679942 6.5812282079e-02
4890 8 0.5000 266 104.606873085265 6.4501755996e-02
4891 8 0.5000 267 105.007079098267 6.3933230199e-02
4892 8 0.5000 268 105.443792496729 1.0608366513e+00
4893 8 0.5000 269 105.793873197664 6.6064551564e-02
4894 8 0.5000 270 106.193992457394 6.4481431078e-02
4895 8 0.5000 271 106.602102039350 6.7347831748e-02
4896 8 0.5000 272 107.110425333086 5.0909445724e-01
4897 8 0.5000 273 107.216801188116 6.0597307226e-01
4898 8 0.5000 274 107.731984661348 6.6258768117e-02
4899 8 0.5000 275 108.139701716067 6.5698454173e-02
4900 8 0.5000 276 108.535806917957 6.3653100271e-02
4901 8 0.5000 277 108.933559923294 6.4087986454e-02
4902 8 0.5000 278 109.332179986077 6.3325005007e-02
4903 8 0.5000 279 109.729355845728 6.3694501208e-02
4904 8 0.5000 280 110.128073816425 6.6269852109e-02
4905 8 0.5000 281 110.532874522316 6.6507474547e-02
4906 8 0.5000 282 111.019442249575 1.0324852887e+00
4907 8 0.5000 283 111.262901690775 9.0917776422e-02
4908 8 0.5000 284 111.813027438572 4.9324675131e-01
4909 8 0.5000 285 111.922135419816 6.2390694552e-01
4910 8 0.5000 286 112.442056476397 6.6681585573e-02
4911 8 0.5000 287 112.849841991821 6.6474592533e-02
4912 8 0.5000 288 113.252759357813 6.5042548669e-02
4913 8 0.5000 289 113.656578210876 6.5116447260e-02
4914 8 0.5000 290 114.088296532939 8.5959355301e-02
4915 8 0.5000 291 114.329642342237 1.0340274160e+00
4916 8 0.5000 292 114.809836525474 6.7197414072e-02
4917 8 0.5000 293 115.218719137487 6.4601669474e-02
4918 8 0.5000 294 115.625960430159 6.8932270866e-02
4919 8 0.5000 295 116.109162267827 2.0963627458e-01
4920 8 0.5000 296 116.249599996580 9.0600404115e-01
4921 8 0.5000 297 116.762561474663 6.8578196814e-02
4922 8 0.5000 298 117.165954298575 6.4612156295e-02
4923 8 0.5000 299 117.567713837163 6.3864711598e-02
4924 8 0.5000 300 117.966262158509 6.5799761127e-02
4925 8 0.5000 301 118.359018114927 6.4688998352e-02
4926 8 0.5000 302 118.788503436294 1.0612435617e+00
4927 8 0.5000 303 119.144557487414 6.4269827743e-02
4928 8 0.5000 304 119.540318850596 6.6961076732e-02
4929 8 0.5000 305 119.938998412872 6.4326388917e-02
4930 8 0.5000 306 120.337958412402 6.3943862055e-02
4931 8 0.5000 307 120.740687622314 6.5285299352e-02
4932 8 0.5000 308 121.196242043893 1.2166580111e-01
4933 8 0.5000 309 121.384565636277 9.9566780105e-01
4934 8 0.5000 310 121.884250244374 6.9182288800e-02
4935 8 0.5000 311 122.296659842358 6.6890679423e-02
4936 8 0.5000 312 122.739724518784 9.7891644116e-02
4937 8 0.5000 313 122.957840609108 1.0247555903e+00
4938 8 0.5000 314 123.448629078428 6.5137592068e-02
4939 8 0.5000 315 123.848823349773 6.7648845461e-02
4940 8 0.5000 316 124.256341886605 1.0632744679e+00
4941 8 0.5000 317 124.643629527277 6.4465450556e-02
4942 8 0.5000 318 125.042792438043 6.3410122867e-02
4943 8 0.5000 319 125.436729715852 6.3403681469e-02
4944 8 0.5000 320 125.837786845699 6.5499418669e-02
4945 8 0.5000 321 126.221910779527 6.5555577090e-02
4946 8 0.5000 322 126.628743866591 6.8108589189e-02
4947 8 0.5000 323 127.026249562113 6.5470780459e-02
4948 8 0.5000 324 127.508008129100 1.0388693754e+00
4949 8 0.5000 325 127.760541372565 8.3418931882e-02
4950 8 0.5000 326 128.178912271844 6.7831002368e-02
4951 8 0.5000 327 128.586096734220 6.5475477964e-02
4952 8 0.5000 328 128.995901380661 6.6925365461e-02
4953 8 0.5000 329 129.506604344620 4.0897067898e-01
4954 8 0.5000 330 129.619267196820 7.1154980300e-01
4955 8 0.5000 331 130.136122834832 6.7144170631e-02
4956 8 0.5000 332 130.552363551761 6.8091792944e-02
4957 8 0.5000 333 131.067574480374 9.4108394130e-01
4958 8 0.5000 334 131.221993650473 1.7628483364e-01
4959 8 0.5000 335 131.705885836456 6.8931623455e-02
4960 8 0.5000 336 132.099448821237 6.7047882508e-02
4961 8 0.5000 337 132.508284476798 6.5258028580e-02
4962 8 0.5000 338 132.919537654729 7.1361137856e-02
4963 8 0.5000 339 133.424187667968 3.9886467761e-01
4964 8 0.5000 340 133.536743672166 7.1729804192e-01
4965 8 0.5000 341 134.061098128619 6.8534191166e-02
4966 8 0.5000 342 134.479747807998 8.1319695659e-02
4967 8 0.5000 343 134.763908215780 1.0490129768e+00
4968 8 0.5000 344 135.226586984887 6.8645777152e-02
4969 8 0.5000 345 135.633037934190 6.4345966642e-02
4970 8 0.5000 346 136.031067110103 6.4914011197e-02
4971 8 0.5000 347 136.430139710010 6.4018116194e-02
4972 8 0.5000 348 136.833516576114 6.8981571900e-02
4973 8 0.5000 349 137.222749366998 6.4812317807e-02
4974 8 0.5000 350 137.628292295431 6.6316411771e-02
4975 8 0.5000 351 138.107404697474 1.0391997553e+00
4976 8 0.5000 352 138.362462500270 8.3133390575e-02
4977 8 0.5000 353 138.780143381590 7.1463358567e-02
4978 8 0.5000 354 139.196003644729 6.7132722601e-02
4979 8 0.5000 355 139.711636069255 8.8805639904e-01
4980 8 0.5000 356 139.850045089748 2.3536249915e-01
4981 8 0.5000 357 140.332517154750 6.6274891471e-02
4982 8 0.5000 358 140.737778474690 6.4520818382e-02
4983 8 0.5000 359 141.124569263908 1.0643678331e+00
4984 8 0.5000 360 141.536887638024 6.6259140091e-02
4985 8 0.5000 361 141.917692969887 6.7949371394e-02
4986 8 0.5000 362 142.319636679982 6.4194413638e-02
4987 8 0.5000 363 142.720655522651 7.1102739098e-02
4988 8 0.5000 364 143.111644888094 1.0649096818e+00
4989 8 0.5000 365 143.507994405076 6.3734761365e-02
4990 8 0.5000 366 143.902979820859 6.3909959879e-02
4991 8 0.5000 367 144.305164840840 6.7871563709e-02
4992 8 0.5000 368 144.683242775186 6.8075737030e-02
4993 8 0.5000 369 145.089174588043 6.4258127744e-02
4994 8 0.5000 370 145.488192612121 7.4247942422e-02
4995 8 0.5000 371 145.987494221112 1.0058255869e+00
4996 8 0.5000 372 146.185186938461 1.1516862749e-01
4997 8 0.5000 373 146.623079861368 7.3056372987e-02
4998 8 0.5000 374 147.030288688448 6.4176505364e-02
4999 8 0.5000 375 147.423294324512 1.0653752994e+00
5000 8 0.5000 376 147.825840504762 6.4154980127e-02
5001 8 0.5000 377 148.223186797330 6.4463078600e-02

E-024-theta-sweep.json — 10.3 KB, updated 08-19-2026

JSON sidecar (click to expand)
{
  "experiment": "E-024",
  "task": "2.12: theta-flow numerics (theta-independence test)",
  "script": "research/numerics/scripts/E-024-theta-sweep.py",
  "parameters": {
    "a_list": [
      4.0,
      8.0,
      12.0
    ],
    "thetas_over_pi": [
      0.0,
      0.1667,
      0.3333,
      0.5,
      0.6667,
      0.8333,
      1.0
    ],
    "z_max": 300.0,
    "z_metric": 280.0
  },
  "checks": {
    "V1_lattice_all_theta": true,
    "V2_theta_pi_matches_E022": true,
    "V3_weights_positive": true
  },
  "key_values": {
    "a4_th0.0000pi": {
      "theta_over_pi": 0.0,
      "n_zeros": 381,
      "z1_times_a": 3.1471258584711514,
      "mass_total": 184.1835959613851,
      "mass_pm0.1": 119.4128093530634,
      "mass_pm0.05": 91.94966918355006,
      "residual": 48.76433809073876,
      "valley_mass_mean": 1.0747560148463995,
      "plateau_weight_mean": 0.21201886126408157,
      "Delta_eff": 1.6231737129268227
    },
    "a4_th0.1667pi": {
      "theta_over_pi": 0.1667,
      "n_zeros": 381,
      "z1_times_a": 3.4619359298190293,
      "mass_total": 184.18630284387328,
      "mass_pm0.1": 118.29623992508816,
      "mass_pm0.05": 86.87180322997308,
      "residual": 48.931287590873524,
      "valley_mass_mean": 1.0734525020079346,
      "plateau_weight_mean": 0.2127447286559719,
      "Delta_eff": 1.6185423804514978
    },
    "a4_th0.3333pi": {
      "theta_over_pi": 0.3333,
      "n_zeros": 381,
      "z1_times_a": 3.7176915045337466,
      "mass_total": 183.9726782811009,
      "mass_pm0.1": 113.57262540386267,
      "mass_pm0.05": 85.73049725879235,
      "residual": 50.41888852750091,
      "valley_mass_mean": 1.0599507123301588,
      "plateau_weight_mean": 0.22016981889738385,
      "Delta_eff": 1.5715785355566734
    },
    "a4_th0.5000pi": {
      "theta_over_pi": 0.5,
      "n_zeros": 381,
      "z1_times_a": 3.934163190177167,
      "mass_total": 183.98559583483848,
      "mass_pm0.1": 113.33711825061624,
      "mass_pm0.05": 89.82793793217617,
      "residual": 50.618934373720066,
      "valley_mass_mean": 1.0584655671517333,
      "plateau_weight_mean": 0.22104338154462916,
      "Delta_eff": 1.566216581357752
    },
    "a4_th0.6667pi": {
      "theta_over_pi": 0.6667,
      "n_zeros": 381,
      "z1_times_a": 4.128324562896003,
      "mass_total": 183.9983973653932,
      "mass_pm0.1": 119.75726561744686,
      "mass_pm0.05": 95.81754097212591,
      "residual": 48.13040632212352,
      "valley_mass_mean": 1.078317389232299,
      "plateau_weight_mean": 0.21017644682150013,
      "Delta_eff": 1.6352097313960756
    },
    "a4_th0.8333pi": {
      "theta_over_pi": 0.8333,
      "n_zeros": 381,
      "z1_times_a": 4.314182529701571,
      "mass_total": 184.01134904950752,
      "mass_pm0.1": 120.40026511109403,
      "mass_pm0.05": 90.96419878254113,
      "residual": 47.43102136203055,
      "valley_mass_mean": 1.0839708546625155,
      "plateau_weight_mean": 0.20712236402633416,
      "Delta_eff": 1.6550765456169134
    },
    "a4_th1.0000pi": {
      "theta_over_pi": 1.0,
      "n_zeros": 381,
      "z1_times_a": 4.504293602793437,
      "mass_total": 184.02432245308052,
      "mass_pm0.1": 116.64777135239572,
      "mass_pm0.05": 93.33647263205195,
      "residual": 48.30754760742576,
      "valley_mass_mean": 1.0771172606797996,
      "plateau_weight_mean": 0.2109499895520775,
      "Delta_eff": 1.6304224593273315
    },
    "a8_th0.0000pi": {
      "theta_over_pi": 0.0,
      "n_zeros": 763,
      "z1_times_a": 3.1437903681267265,
      "mass_total": 184.1082994928043,
      "mass_pm0.1": 134.20929653000076,
      "mass_pm0.05": 123.1835197830814,
      "residual": 57.73718018875971,
      "valley_mass_mean": 1.002945391301941,
      "plateau_weight_mean": 0.09852761124361722,
      "Delta_eff": 2.320359515027157
    },
    "a8_th0.1667pi": {
      "theta_over_pi": 0.1667,
      "n_zeros": 763,
      "z1_times_a": 3.418119179475546,
      "mass_total": 184.11283914170593,
      "mass_pm0.1": 131.8317519020843,
      "mass_pm0.05": 126.78097971430489,
      "residual": 56.7356526846647,
      "valley_mass_mean": 1.010930051246359,
      "plateau_weight_mean": 0.09681851993970085,
      "Delta_eff": 2.3457877312638367
    },
    "a8_th0.3333pi": {
      "theta_over_pi": 0.3333,
      "n_zeros": 763,
      "z1_times_a": 3.654042277120252,
      "mass_total": 184.11760264338506,
      "mass_pm0.1": 132.1490251381983,
      "mass_pm0.05": 124.0292094105938,
      "residual": 58.16107071439245,
      "valley_mass_mean": 0.9996550153094651,
      "plateau_weight_mean": 0.09925097391534557,
      "Delta_eff": 2.3097585025024654
    },
    "a8_th0.5000pi": {
      "theta_over_pi": 0.5,
      "n_zeros": 763,
      "z1_times_a": 3.867441949623103,
      "mass_total": 184.12212186389277,
      "mass_pm0.1": 133.24139728241443,
      "mass_pm0.05": 121.15410070178395,
      "residual": 59.85047462666191,
      "valley_mass_mean": 0.9862829145811973,
      "plateau_weight_mean": 0.10213391574515683,
      "Delta_eff": 2.26765839342186
    },
    "a8_th0.6667pi": {
      "theta_over_pi": 0.6667,
      "n_zeros": 763,
      "z1_times_a": 4.071478758632688,
      "mass_total": 184.1262503654809,
      "mass_pm0.1": 132.29513175105507,
      "mass_pm0.05": 122.51608044758039,
      "residual": 57.48114969555114,
      "valley_mass_mean": 1.0051198465867441,
      "plateau_weight_mean": 0.09809069913916582,
      "Delta_eff": 2.3269695116402334
    },
    "a8_th0.8333pi": {
      "theta_over_pi": 0.8333,
      "n_zeros": 763,
      "z1_times_a": 4.27766402464752,
      "mass_total": 184.12992169567084,
      "mass_pm0.1": 131.99007596810569,
      "mass_pm0.05": 124.30470833176733,
      "residual": 57.28031602287514,
      "valley_mass_mean": 1.0067429021650454,
      "plateau_weight_mean": 0.09774797956122035,
      "Delta_eff": 2.332083020259487
    },
    "a8_th1.0000pi": {
      "theta_over_pi": 1.0,
      "n_zeros": 763,
      "z1_times_a": 4.4968101024775144,
      "mass_total": 184.13312237431055,
      "mass_pm0.1": 133.51693635274228,
      "mass_pm0.05": 124.28962039506533,
      "residual": 58.6511497935264,
      "valley_mass_mean": 0.9958886712760646,
      "plateau_weight_mean": 0.10008728633707581,
      "Delta_eff": 2.297592806874823
    },
    "a12_th0.0000pi": {
      "theta_over_pi": 0.0,
      "n_zeros": 1145,
      "z1_times_a": 3.1428501414881977,
      "mass_total": 184.16007157245687,
      "mass_pm0.1": 133.61538092090012,
      "mass_pm0.05": 128.10759866335772,
      "residual": 60.30642315719122,
      "valley_mass_mean": 0.9829654636132195,
      "plateau_weight_mean": 0.06395166824728656,
      "Delta_eff": 2.732446371442262
    },
    "a12_th0.1667pi": {
      "theta_over_pi": 0.1667,
      "n_zeros": 1145,
      "z1_times_a": 3.405992501692748,
      "mass_total": 184.1639822094043,
      "mass_pm0.1": 133.36866840406773,
      "mass_pm0.05": 129.35521418242917,
      "residual": 60.3669918644722,
      "valley_mass_mean": 0.9825157963883501,
      "plateau_weight_mean": 0.06401589805352302,
      "Delta_eff": 2.73098496176509
    },
    "a12_th0.3333pi": {
      "theta_over_pi": 0.3333,
      "n_zeros": 1145,
      "z1_times_a": 3.635830555925344,
      "mass_total": 184.09580595481827,
      "mass_pm0.1": 133.41942035595872,
      "mass_pm0.05": 129.05415843419973,
      "residual": 58.57426551897014,
      "valley_mass_mean": 0.9962027018718106,
      "plateau_weight_mean": 0.06218074895856703,
      "Delta_eff": 2.7739053032480143
    },
    "a12_th0.5000pi": {
      "theta_over_pi": 0.5,
      "n_zeros": 1145,
      "z1_times_a": 3.8476946281889486,
      "mass_total": 184.09881987373944,
      "mass_pm0.1": 132.95788338488353,
      "mass_pm0.05": 129.3505890774291,
      "residual": 58.94147251618104,
      "valley_mass_mean": 0.9933122806155429,
      "plateau_weight_mean": 0.06257056530380153,
      "Delta_eff": 2.764750131884173
    },
    "a12_th0.6667pi": {
      "theta_over_pi": 0.6667,
      "n_zeros": 1145,
      "z1_times_a": 4.05423555082551,
      "mass_total": 184.10127816912785,
      "mass_pm0.1": 133.37160860447023,
      "mass_pm0.05": 129.68837121321633,
      "residual": 58.35802636312266,
      "valley_mass_mean": 0.9979623159206761,
      "plateau_weight_mean": 0.06195119571456758,
      "Delta_eff": 2.7793686068267633
    },
    "a12_th0.8333pi": {
      "theta_over_pi": 0.8333,
      "n_zeros": 1145,
      "z1_times_a": 4.2666373857585445,
      "mass_total": 184.1032513640804,
      "mass_pm0.1": 133.09565694496038,
      "mass_pm0.05": 129.3399679137547,
      "residual": 58.63289108937627,
      "valley_mass_mean": 0.9957965101166993,
      "plateau_weight_mean": 0.062242984171312424,
      "Delta_eff": 2.7724971046813764
    },
    "a12_th1.0000pi": {
      "theta_over_pi": 1.0,
      "n_zeros": 1145,
      "z1_times_a": 4.495304974166889,
      "mass_total": 184.10483484645468,
      "mass_pm0.1": 133.31147006007708,
      "mass_pm0.05": 129.13788187469896,
      "residual": 57.594257954705384,
      "valley_mass_mean": 1.004052197553566,
      "plateau_weight_mean": 0.06114040122580191,
      "Delta_eff": 2.7986264096434
    },
    "V4_theta_spread": {
      "a4": {
        "residual_minmax": [
          47.43102136203055,
          50.618934373720066
        ],
        "residual_spread_pct": 2.234095821084676,
        "mass_pm01_spread_pct": 2.302784187513983,
        "z1_times_a_range": [
          3.1471258584711514,
          4.504293602793437
        ]
      },
      "a8": {
        "residual_minmax": [
          56.7356526846647,
          59.85047462666191
        ],
        "residual_spread_pct": 1.6396401999266315,
        "mass_pm01_spread_pct": 0.6333372523281642,
        "z1_times_a_range": [
          3.1437903681267265,
          4.4968101024775144
        ]
      },
      "a12": {
        "residual_minmax": [
          57.594257954705384,
          60.3669918644722
        ],
        "residual_spread_pct": 1.6057262581418954,
        "mass_pm01_spread_pct": 0.15063835179687926,
        "z1_times_a_range": [
          3.1428501414881977,
          4.495304974166889
        ]
      }
    }
  },
  "elapsed_seconds": 212.6,
  "timestamp_utc": "2026-08-19T18:19:09.910473+00:00"
}

Source code

Python script (click to expand)
"""E-024 — task 2.12: theta-flow numerics (D-041 §5/§8, D-038 §5).

Theory (de Branges/Clark): the model space's kernel K_a(z,z) is
theta-INDEPENDENT; the extension choice theta only phase-shifts the
atom lattice z_k(theta). PREDICTION (to be tested): consolidation
statistics (valley-captured mass, residual) are theta-independent —
if confirmed, no theta(a) flow can fix consolidation and the
obstruction is entirely the K-saturation (D-040 F6); if refuted,
the theta-flow channel is alive.

For theta in {0, pi/6, pi/3, pi/2, 2pi/3, 5pi/6, pi} and a in {4,8,12}:
  - zeros of W(a,theta;z) on (0, Z_MAX] via the real gauge
        g_theta(z) = Re[ e^{-i theta/2} (z - i) V_+(z) ]
    (e^{-i theta/2} W = 2 Re[e^{-i theta/2}(z-i)V_+] on the real line,
    using Vm = conj(Vp); reduces to z ImV - ReV at theta=pi);
  - Clark weights w_k = 1/K_a(z_k,z_k) (E-022 Schur-Toeplitz route);
  - metrics: n_zeros, z1*a, mass within +/-0.1 and +/-0.05 of true
    gammas, residual R(a,theta) = total - captured, mean valley mass,
    effective depth Delta_eff = log(mean valley weight / mean plateau
    weight).

Checks:
  V1. all zeros real & count = maximal lattice a*Z_MAX/pi +/- 2,
      every theta (self-adjointness).
  V2. theta=pi reproduces E-022: |z1*a - 4.4953| < 0.05 at a=12 and
      mass(+/-0.1) within 1% of E-022 value.
  V3. weights positive, all theta.
  V4. headline: theta-spread of residual R and mass(+/-0.1) reported
      per a (small spread = theta-independence confirmed).

Outputs: research/numerics/data/E-024-theta-sweep.csv (+ .json)
"""
import importlib.util
import json
import sys
import time
from datetime import datetime, timezone
from pathlib import Path

import mpmath as mp
import numpy as np
import scipy.linalg
import scipy.optimize

REPO = Path(__file__).resolve().parents[3]
DATA = REPO / "research" / "numerics" / "data"
CSV = DATA / "E-024-theta-sweep.csv"
JSON = DATA / "E-024-theta-sweep.json"

_spec = importlib.util.spec_from_file_location(
    "E16", Path(__file__).with_name("E-016-herglotz-fine-structure.py"))
E16 = importlib.util.module_from_spec(_spec)
_spec.loader.exec_module(E16)                     # runs the e^20 sieve
sys.path.insert(0, str(Path(__file__).parent))
from prime_backend_v2 import PrimeBackendV2       # noqa: E402

H = E16.H_MAIN
LAM = E16.LAM_SHIFT
A_LIST = [4.0, 8.0, 12.0]
THETAS = [0.0, np.pi / 6, np.pi / 3, np.pi / 2, 2 * np.pi / 3,
          5 * np.pi / 6, np.pi]
Z_MAX = 300.0
Z_METRIC = 280.0
N_GRID = 40000
XN = E16.XN
mp.mp.dps = 40


def collect_t_points(a, h):
    n_elem = int(round(2 * a / h))
    pts = []

    def add_quad(lo, hi, peak):
        n_lo = int(np.ceil(np.exp(lo)))
        n_hi = int(np.floor(np.exp(hi)))
        if n_hi - n_lo > 64:
            for aa, bb in ((lo, peak), (peak, hi)):
                if bb - aa > 0:
                    mid, half = 0.5 * (aa + bb), 0.5 * (bb - aa)
                    pts.extend(mid + half * XN)
            return
        segs = sorted({lo, peak, hi} |
                      {float(np.log(n))
                       for n in range(max(n_lo, 2), n_hi + 1)
                       if lo < np.log(n) < hi})
        for p0, p1 in zip(segs, segs[1:]):
            if p1 - p0 > 0:
                mid, half = 0.5 * (p0 + p1), 0.5 * (p1 - p0)
                pts.extend(mid + half * XN)

    for k in range(n_elem):
        if k == 0:
            add_quad(0.0, h, 0.0)
        else:
            add_quad((k - 1) * h, (k + 1) * h, k * h)
    return np.array(pts)


def locate_zeros_theta(cp, x, h, theta, z_max=Z_MAX, n_grid=N_GRID):
    zg = np.linspace(1e-3, z_max, n_grid)
    E = np.exp(1j * np.outer(zg, x))
    V = E16.hat_FT(zg, h) * (E @ cp)
    f = np.exp(-0.5j * theta) * (zg - 1j) * V
    g = f.real

    def g_direct(zz):
        V1 = E16.hat_FT(np.array([zz]), h)[0] * complex(
            np.exp(1j * zz * x) @ cp)
        return float(np.real(np.exp(-0.5j * theta) * (zz - 1j) * V1))

    idx = np.flatnonzero(np.sign(g[:-1]) * np.sign(g[1:]) < 0)
    zeros = []
    for i in idx:
        try:
            zeros.append(scipy.optimize.brentq(g_direct, zg[i], zg[i + 1],
                                               xtol=1e-13, rtol=1e-13))
        except ValueError:
            pass
    return np.array(zeros)


def main() -> int:
    if JSON.exists() and "--force" not in sys.argv:
        print(f"cached: {JSON} (use --force to recompute)")
        return 0
    t0 = time.time()

    print("backend: load E-022 cache ...", flush=True)
    tq = np.concatenate([collect_t_points(a, H) for a in A_LIST])
    be = PrimeBackendV2(tq)
    be.load_cache(DATA / "E-022-backend-cache.npz")
    E16._BUILD.clear()
    E16.prime_sum_vec = be.prime_sum

    mp.mp.dps = 30
    gam = np.array([float(mp.zetazero(k).imag) for k in range(1, 201)])
    gam = gam[gam <= Z_METRIC]

    rows = []
    report = {"per_a_theta": {}}
    v1_ok = v3_ok = True
    v2 = {}
    for a in A_LIST:
        ta = time.time()
        x, h, Q, M, b = E16.build(a, H)
        n = len(x)
        cp, _ = E16.solve_v(Q, M, b[+1.0], LAM, n)
        # Toeplitz bordered solver for weights (theta-independent K)
        mc = np.zeros(n)
        mc[0] = 2 * h / 3
        mc[1] = h / 6
        tc = Q[:, 0] - LAM * mc
        u1 = scipy.linalg.solve_toeplitz((tc, tc), np.ones(n))
        s1 = u1.sum()

        def K1(z):
            bz = E16.hat_FT(np.array([z]), h)[0] * np.exp(-1j * z * x)
            u0 = scipy.linalg.solve_toeplitz((tc, tc), bz)
            v = u0 - (u0.sum() / s1) * u1
            return float(np.real(np.conj(bz) @ v))

        for th in THETAS:
            zeros = locate_zeros_theta(cp, x, h, th)
            lat = a * Z_MAX / np.pi
            if abs(len(zeros) - lat) > 2:
                v1_ok = False
            zm = zeros[zeros <= Z_METRIC]
            ws = np.array([1.0 / K1(z) for z in zm])
            if np.any(ws <= 0):
                v3_ok = False
            tot = float(ws.sum())
            idx = np.clip(np.searchsorted(gam, zm), 1, len(gam) - 1)
            d = np.minimum(np.abs(zm - gam[idx - 1]),
                           np.abs(zm - gam[idx]))
            m01 = float(ws[d <= 0.1].sum())
            m005 = float(ws[d <= 0.05].sum())
            # valley atoms = nearest to each gamma; plateau = rest
            near_idx = np.array([np.argmin(np.abs(zm - g)) for g in gam])
            valley_mass = ws[near_idx]
            mask_pl = np.ones(len(zm), bool)
            mask_pl[near_idx] = False
            pl = ws[mask_pl]
            d_eff = float(np.log(valley_mass.mean() / pl.mean()))
            key = f"a{a:g}_th{th / np.pi:.4f}pi"
            report["per_a_theta"][key] = {
                "theta_over_pi": round(th / np.pi, 4),
                "n_zeros": int(len(zeros)),
                "z1_times_a": float(zeros[0] * a),
                "mass_total": tot,
                "mass_pm0.1": m01, "mass_pm0.05": m005,
                "residual": tot - float(valley_mass.sum()),
                "valley_mass_mean": float(valley_mass.mean()),
                "plateau_weight_mean": float(pl.mean()),
                "Delta_eff": d_eff,
            }
            for k, (zz, ww) in enumerate(zip(zm, ws), 1):
                rows.append((a, th / np.pi, k, zz, ww))
        print(f"a={a:g} done ({time.time() - ta:.0f}s)", flush=True)

    # V2: theta=pi cross-check vs E-022
    e022 = report["per_a_theta"]["a12_th1.0000pi"]
    v2 = {"z1_times_a_ok": bool(abs(e022["z1_times_a"] - 4.4953) < 0.05)}
    # V4: theta-spread per a
    v4 = {}
    for a in A_LIST:
        vals = [report["per_a_theta"][f"a{a:g}_th{th / np.pi:.4f}pi"]
                for th in THETAS]
        res = np.array([v["residual"] for v in vals])
        m01 = np.array([v["mass_pm0.1"] for v in vals])
        z1a = np.array([v["z1_times_a"] for v in vals])
        v4[f"a{a:g}"] = {
            "residual_minmax": [float(res.min()), float(res.max())],
            "residual_spread_pct": float(100 * res.std() / res.mean()),
            "mass_pm01_spread_pct": float(100 * m01.std() / m01.mean()),
            "z1_times_a_range": [float(z1a.min()), float(z1a.max())],
        }
        print(f"a={a:g}: residual spread {v4[f'a{a:g}']['residual_spread_pct']:.2f}%, "
              f"mass01 spread {v4[f'a{a:g}']['mass_pm01_spread_pct']:.2f}%, "
              f"z1a in [{z1a.min():.3f},{z1a.max():.3f}]", flush=True)

    checks = {"V1_lattice_all_theta": v1_ok,
              "V2_theta_pi_matches_E022": v2["z1_times_a_ok"],
              "V3_weights_positive": v3_ok}

    import csv as csvmod
    with open(CSV, "w", newline="") as f:
        w = csvmod.writer(f)
        w.writerow(["a", "theta_over_pi", "k", "z_k", "w_k"])
        for a, thp, k, zz, ww in rows:
            w.writerow([f"{a:g}", f"{thp:.4f}", k, f"{zz:.12f}",
                        f"{ww:.10e}"])

    meta = {
        "experiment": "E-024",
        "task": "2.12: theta-flow numerics (theta-independence test)",
        "script": "research/numerics/scripts/E-024-theta-sweep.py",
        "parameters": {"a_list": A_LIST,
                       "thetas_over_pi": [round(t / np.pi, 4)
                                          for t in THETAS],
                       "z_max": Z_MAX, "z_metric": Z_METRIC},
        "checks": checks,
        "key_values": {**report["per_a_theta"], "V4_theta_spread": v4},
        "elapsed_seconds": round(time.time() - t0, 1),
        "timestamp_utc": datetime.now(timezone.utc).isoformat(),
    }
    JSON.write_text(json.dumps(meta, indent=2))
    print(f"wrote {CSV.name}, {JSON.name}; elapsed "
          f"{meta['elapsed_seconds']}s", flush=True)
    return 0 if all(checks.values()) else 1


if __name__ == "__main__":
    sys.exit(main())