Current task: —

E-016-herglotz-fine-structure.py

Experiments: E-016 · script updated 08-18-2026

E-016-herglotz-fine-structure.csv — 130.1 KB, updated 08-18-2026

← prev page 2 of 8 · 500/page · 3519 rows next →
# seriesayrho
502 W_thpi 4.0 5.950000 1.2726686965e+00
503 W_thpi 4.0 6.000000 1.2726325110e+00
504 W_thpi 4.0 6.050000 1.2725973504e+00
505 W_thpi 4.0 6.100000 1.2725631805e+00
506 W_thpi 4.0 6.150000 1.2725299687e+00
507 W_thpi 4.0 6.200000 1.2724976835e+00
508 W_thpi 4.0 6.250000 1.2724662948e+00
509 W_thpi 4.0 6.300000 1.2724357737e+00
510 W_thpi 4.0 6.350000 1.2724060925e+00
511 W_thpi 4.0 6.400000 1.2723772244e+00
512 W_thpi 4.0 6.450000 1.2723491438e+00
513 W_thpi 4.0 6.500000 1.2723218260e+00
514 W_thpi 4.0 6.550000 1.2722952474e+00
515 W_thpi 4.0 6.600000 1.2722693850e+00
516 W_thpi 4.0 6.650000 1.2722442169e+00
517 W_thpi 4.0 6.700000 1.2722197219e+00
518 W_thpi 4.0 6.750000 1.2721958798e+00
519 W_thpi 4.0 6.800000 1.2721726709e+00
520 W_thpi 4.0 6.850000 1.2721500762e+00
521 W_thpi 4.0 6.900000 1.2721280777e+00
522 W_thpi 4.0 6.950000 1.2721066576e+00
523 W_thpi 4.0 7.000000 1.2720857992e+00
524 W_thpi 4.0 7.050000 1.2720654860e+00
525 W_thpi 4.0 7.100000 1.2720457022e+00
526 W_thpi 4.0 7.150000 1.2720264328e+00
527 W_thpi 4.0 7.200000 1.2720076629e+00
528 W_thpi 4.0 7.250000 1.2719893784e+00
529 W_thpi 4.0 7.300000 1.2719715657e+00
530 W_thpi 4.0 7.350000 1.2719542114e+00
531 W_thpi 4.0 7.400000 1.2719373028e+00
532 W_thpi 4.0 7.450000 1.2719208276e+00
533 W_thpi 4.0 7.500000 1.2719047737e+00
534 W_thpi 4.0 7.550000 1.2718891296e+00
535 W_thpi 4.0 7.600000 1.2718738842e+00
536 W_thpi 4.0 7.650000 1.2718590266e+00
537 W_thpi 4.0 7.700000 1.2718445463e+00
538 W_thpi 4.0 7.750000 1.2718304333e+00
539 W_thpi 4.0 7.800000 1.2718166778e+00
540 W_thpi 4.0 7.850000 1.2718032701e+00
541 W_thpi 4.0 7.900000 1.2717902012e+00
542 W_thpi 4.0 7.950000 1.2717774621e+00
543 W_thpi 4.0 8.000000 1.2717650442e+00
544 W_thpi 4.0 8.050000 1.2717529391e+00
545 W_thpi 4.0 8.100000 1.2717411388e+00
546 W_thpi 4.0 8.150000 1.2717296353e+00
547 W_thpi 4.0 8.200000 1.2717184210e+00
548 W_thpi 4.0 8.250000 1.2717074886e+00
549 W_thpi 4.0 8.300000 1.2716968308e+00
550 W_thpi 4.0 8.350000 1.2716864407e+00
551 W_thpi 4.0 8.400000 1.2716763116e+00
552 W_thpi 4.0 8.450000 1.2716664369e+00
553 W_thpi 4.0 8.500000 1.2716568103e+00
554 W_thpi 4.0 8.550000 1.2716474255e+00
555 W_thpi 4.0 8.600000 1.2716382766e+00
556 W_thpi 4.0 8.650000 1.2716293577e+00
557 W_thpi 4.0 8.700000 1.2716206632e+00
558 W_thpi 4.0 8.750000 1.2716121876e+00
559 W_thpi 4.0 8.800000 1.2716039255e+00
560 W_thpi 4.0 8.850000 1.2715958718e+00
561 W_thpi 4.0 8.900000 1.2715880214e+00
562 W_thpi 4.0 8.950000 1.2715803695e+00
563 W_thpi 4.0 9.000000 1.2715729111e+00
564 W_thpi 4.0 9.050000 1.2715656418e+00
565 W_thpi 4.0 9.100000 1.2715585570e+00
566 W_thpi 4.0 9.150000 1.2715516522e+00
567 W_thpi 4.0 9.200000 1.2715449233e+00
568 W_thpi 4.0 9.250000 1.2715383662e+00
569 W_thpi 4.0 9.300000 1.2715319766e+00
570 W_thpi 4.0 9.350000 1.2715257508e+00
571 W_thpi 4.0 9.400000 1.2715196849e+00
572 W_thpi 4.0 9.450000 1.2715137751e+00
573 W_thpi 4.0 9.500000 1.2715080179e+00
574 W_thpi 4.0 9.550000 1.2715024097e+00
575 W_thpi 4.0 9.600000 1.2714969471e+00
576 W_thpi 4.0 9.650000 1.2714916267e+00
577 W_thpi 4.0 9.700000 1.2714864453e+00
578 W_thpi 4.0 9.750000 1.2714813997e+00
579 W_thpi 4.0 9.800000 1.2714764867e+00
580 W_thpi 4.0 9.850000 1.2714717034e+00
581 W_thpi 4.0 9.900000 1.2714670469e+00
582 W_thpi 4.0 9.950000 1.2714625143e+00
583 W_thpi 4.0 10.000000 1.2714581027e+00
584 W_thpi 4.0 10.050000 1.2714538095e+00
585 W_thpi 4.0 10.100000 1.2714496319e+00
586 W_thpi 4.0 10.150000 1.2714455675e+00
587 W_thpi 4.0 10.200000 1.2714416137e+00
588 W_thpi 4.0 10.250000 1.2714377681e+00
589 W_thpi 4.0 10.300000 1.2714340281e+00
590 W_thpi 4.0 10.350000 1.2714303916e+00
591 W_thpi 4.0 10.400000 1.2714268562e+00
592 W_thpi 4.0 10.450000 1.2714234196e+00
593 W_thpi 4.0 10.500000 1.2714200798e+00
594 W_thpi 4.0 10.550000 1.2714168346e+00
595 W_thpi 4.0 10.600000 1.2714136819e+00
596 W_thpi 4.0 10.650000 1.2714106196e+00
597 W_thpi 4.0 10.700000 1.2714076460e+00
598 W_thpi 4.0 10.750000 1.2714047589e+00
599 W_thpi 4.0 10.800000 1.2714019566e+00
600 W_thpi 4.0 10.850000 1.2713992371e+00
601 W_thpi 4.0 10.900000 1.2713965988e+00
602 W_thpi 4.0 10.950000 1.2713940398e+00
603 W_thpi 4.0 11.000000 1.2713915585e+00
604 W_thpi 4.0 11.050000 1.2713891532e+00
605 W_thpi 4.0 11.100000 1.2713868222e+00
606 W_thpi 4.0 11.150000 1.2713845640e+00
607 W_thpi 4.0 11.200000 1.2713823770e+00
608 W_thpi 4.0 11.250000 1.2713802597e+00
609 W_thpi 4.0 11.300000 1.2713782107e+00
610 W_thpi 4.0 11.350000 1.2713762284e+00
611 W_thpi 4.0 11.400000 1.2713743114e+00
612 W_thpi 4.0 11.450000 1.2713724584e+00
613 W_thpi 4.0 11.500000 1.2713706681e+00
614 W_thpi 4.0 11.550000 1.2713689390e+00
615 W_thpi 4.0 11.600000 1.2713672700e+00
616 W_thpi 4.0 11.650000 1.2713656597e+00
617 W_thpi 4.0 11.700000 1.2713641069e+00
618 W_thpi 4.0 11.750000 1.2713626105e+00
619 W_thpi 4.0 11.800000 1.2713611691e+00
620 W_thpi 4.0 11.850000 1.2713597818e+00
621 W_thpi 4.0 11.900000 1.2713584473e+00
622 W_thpi 4.0 11.950000 1.2713571645e+00
623 W_thpi 4.0 12.000000 1.2713559325e+00
624 W_thpi 4.0 12.050000 1.2713547500e+00
625 W_thpi 4.0 12.100000 1.2713536161e+00
626 W_thpi 4.0 12.150000 1.2713525299e+00
627 W_thpi 4.0 12.200000 1.2713514902e+00
628 W_thpi 4.0 12.250000 1.2713504962e+00
629 W_thpi 4.0 12.300000 1.2713495468e+00
630 W_thpi 4.0 12.350000 1.2713486412e+00
631 W_thpi 4.0 12.400000 1.2713477785e+00
632 W_thpi 4.0 12.450000 1.2713469578e+00
633 W_thpi 4.0 12.500000 1.2713461782e+00
634 W_thpi 4.0 12.550000 1.2713454389e+00
635 W_thpi 4.0 12.600000 1.2713447390e+00
636 W_thpi 4.0 12.650000 1.2713440777e+00
637 W_thpi 4.0 12.700000 1.2713434544e+00
638 W_thpi 4.0 12.750000 1.2713428680e+00
639 W_thpi 4.0 12.800000 1.2713423180e+00
640 W_thpi 4.0 12.850000 1.2713418036e+00
641 W_thpi 4.0 12.900000 1.2713413240e+00
642 W_thpi 4.0 12.950000 1.2713408785e+00
643 W_thpi 4.0 13.000000 1.2713404665e+00
644 W_thpi 4.0 13.050000 1.2713400873e+00
645 W_thpi 4.0 13.100000 1.2713397401e+00
646 W_thpi 4.0 13.150000 1.2713394243e+00
647 W_thpi 4.0 13.200000 1.2713391394e+00
648 W_thpi 4.0 13.250000 1.2713388846e+00
649 W_thpi 4.0 13.300000 1.2713386593e+00
650 W_thpi 4.0 13.350000 1.2713384630e+00
651 W_thpi 4.0 13.400000 1.2713382951e+00
652 W_thpi 4.0 13.450000 1.2713381550e+00
653 W_thpi 4.0 13.500000 1.2713380421e+00
654 W_thpi 4.0 13.550000 1.2713379558e+00
655 W_thpi 4.0 13.600000 1.2713378957e+00
656 W_thpi 4.0 13.650000 1.2713378612e+00
657 W_thpi 4.0 13.700000 1.2713378517e+00
658 W_thpi 4.0 13.750000 1.2713378668e+00
659 W_thpi 4.0 13.800000 1.2713379060e+00
660 W_thpi 4.0 13.850000 1.2713379688e+00
661 W_thpi 4.0 13.900000 1.2713380546e+00
662 W_thpi 4.0 13.950000 1.2713381631e+00
663 W_thpi 4.0 14.000000 1.2713382938e+00
664 W_thpi 4.0 14.050000 1.2713384462e+00
665 W_thpi 4.0 14.100000 1.2713386199e+00
666 W_thpi 4.0 14.150000 1.2713388144e+00
667 W_thpi 4.0 14.200000 1.2713390294e+00
668 W_thpi 4.0 14.250000 1.2713392643e+00
669 W_thpi 4.0 14.300000 1.2713395189e+00
670 W_thpi 4.0 14.350000 1.2713397926e+00
671 W_thpi 4.0 14.400000 1.2713400852e+00
672 W_thpi 4.0 14.450000 1.2713403962e+00
673 W_thpi 4.0 14.500000 1.2713407253e+00
674 W_thpi 4.0 14.550000 1.2713410720e+00
675 W_thpi 4.0 14.600000 1.2713414361e+00
676 W_thpi 4.0 14.650000 1.2713418172e+00
677 W_thpi 4.0 14.700000 1.2713422148e+00
678 W_thpi 4.0 14.750000 1.2713426288e+00
679 W_thpi 4.0 14.800000 1.2713430587e+00
680 W_thpi 4.0 14.850000 1.2713435042e+00
681 W_thpi 4.0 14.900000 1.2713439650e+00
682 W_thpi 4.0 14.950000 1.2713444408e+00
683 W_thpi 4.0 15.000000 1.2713449313e+00
684 W_thpi 4.0 15.050000 1.2713454362e+00
685 W_thpi 4.0 15.100000 1.2713459551e+00
686 W_thpi 4.0 15.150000 1.2713464878e+00
687 W_thpi 4.0 15.200000 1.2713470341e+00
688 W_thpi 4.0 15.250000 1.2713475935e+00
689 W_thpi 4.0 15.300000 1.2713481659e+00
690 W_thpi 4.0 15.350000 1.2713487510e+00
691 W_thpi 4.0 15.400000 1.2713493485e+00
692 W_thpi 4.0 15.450000 1.2713499582e+00
693 W_thpi 4.0 15.500000 1.2713505798e+00
694 W_thpi 4.0 15.550000 1.2713512130e+00
695 W_thpi 4.0 15.600000 1.2713518576e+00
696 W_thpi 4.0 15.650000 1.2713525134e+00
697 W_thpi 4.0 15.700000 1.2713531802e+00
698 W_thpi 4.0 15.750000 1.2713538576e+00
699 W_thpi 4.0 15.800000 1.2713545456e+00
700 W_thpi 4.0 15.850000 1.2713552437e+00
701 W_thpi 4.0 15.900000 1.2713559519e+00
702 W_thpi 4.0 15.950000 1.2713566700e+00
703 W_thpi 4.0 16.000000 1.2713573976e+00
704 W_thpi 4.0 16.050000 1.2713581347e+00
705 W_thpi 4.0 16.100000 1.2713588810e+00
706 W_thpi 4.0 16.150000 1.2713596362e+00
707 W_thpi 4.0 16.200000 1.2713604003e+00
708 W_thpi 4.0 16.250000 1.2713611730e+00
709 W_thpi 4.0 16.300000 1.2713619542e+00
710 W_thpi 4.0 16.350000 1.2713627436e+00
711 W_thpi 4.0 16.400000 1.2713635410e+00
712 W_thpi 4.0 16.450000 1.2713643464e+00
713 W_thpi 4.0 16.500000 1.2713651594e+00
714 W_thpi 4.0 16.550000 1.2713659800e+00
715 W_thpi 4.0 16.600000 1.2713668080e+00
716 W_thpi 4.0 16.650000 1.2713676432e+00
717 W_thpi 4.0 16.700000 1.2713684855e+00
718 W_thpi 4.0 16.750000 1.2713693346e+00
719 W_thpi 4.0 16.800000 1.2713701905e+00
720 W_thpi 4.0 16.850000 1.2713710530e+00
721 W_thpi 4.0 16.900000 1.2713719219e+00
722 W_thpi 4.0 16.950000 1.2713727971e+00
723 W_thpi 4.0 17.000000 1.2713736784e+00
724 W_thpi 4.0 17.050000 1.2713745658e+00
725 W_thpi 4.0 17.100000 1.2713754590e+00
726 W_thpi 4.0 17.150000 1.2713763579e+00
727 W_thpi 4.0 17.200000 1.2713772624e+00
728 W_thpi 4.0 17.250000 1.2713781724e+00
729 W_thpi 4.0 17.300000 1.2713790877e+00
730 W_thpi 4.0 17.350000 1.2713800081e+00
731 W_thpi 4.0 17.400000 1.2713809337e+00
732 W_thpi 4.0 17.450000 1.2713818642e+00
733 W_thpi 4.0 17.500000 1.2713827996e+00
734 W_thpi 4.0 17.550000 1.2713837396e+00
735 W_thpi 4.0 17.600000 1.2713846842e+00
736 W_thpi 4.0 17.650000 1.2713856334e+00
737 W_thpi 4.0 17.700000 1.2713865869e+00
738 W_thpi 4.0 17.750000 1.2713875446e+00
739 W_thpi 4.0 17.800000 1.2713885065e+00
740 W_thpi 4.0 17.850000 1.2713894724e+00
741 W_thpi 4.0 17.900000 1.2713904423e+00
742 W_thpi 4.0 17.950000 1.2713914160e+00
743 W_thpi 4.0 18.000000 1.2713923935e+00
744 W_thpi 4.0 18.050000 1.2713933746e+00
745 W_thpi 4.0 18.100000 1.2713943592e+00
746 W_thpi 4.0 18.150000 1.2713953472e+00
747 W_thpi 4.0 18.200000 1.2713963386e+00
748 W_thpi 4.0 18.250000 1.2713973333e+00
749 W_thpi 4.0 18.300000 1.2713983311e+00
750 W_thpi 4.0 18.350000 1.2713993320e+00
751 W_thpi 4.0 18.400000 1.2714003358e+00
752 W_thpi 4.0 18.450000 1.2714013426e+00
753 W_thpi 4.0 18.500000 1.2714023522e+00
754 W_thpi 4.0 18.550000 1.2714033645e+00
755 W_thpi 4.0 18.600000 1.2714043795e+00
756 W_thpi 4.0 18.650000 1.2714053970e+00
757 W_thpi 4.0 18.700000 1.2714064170e+00
758 W_thpi 4.0 18.750000 1.2714074395e+00
759 W_thpi 4.0 18.800000 1.2714084643e+00
760 W_thpi 4.0 18.850000 1.2714094913e+00
761 W_thpi 4.0 18.900000 1.2714105205e+00
762 W_thpi 4.0 18.950000 1.2714115519e+00
763 W_thpi 4.0 19.000000 1.2714125852e+00
764 W_thpi 4.0 19.050000 1.2714136206e+00
765 W_thpi 4.0 19.100000 1.2714146578e+00
766 W_thpi 4.0 19.150000 1.2714156969e+00
767 W_thpi 4.0 19.200000 1.2714167378e+00
768 W_thpi 4.0 19.250000 1.2714177804e+00
769 W_thpi 4.0 19.300000 1.2714188246e+00
770 W_thpi 4.0 19.350000 1.2714198704e+00
771 W_thpi 4.0 19.400000 1.2714209177e+00
772 W_thpi 4.0 19.450000 1.2714219664e+00
773 W_thpi 4.0 19.500000 1.2714230166e+00
774 W_thpi 4.0 19.550000 1.2714240681e+00
775 W_thpi 4.0 19.600000 1.2714251208e+00
776 W_thpi 4.0 19.650000 1.2714261748e+00
777 W_thpi 4.0 19.700000 1.2714272300e+00
778 W_thpi 4.0 19.750000 1.2714282862e+00
779 W_thpi 4.0 19.800000 1.2714293436e+00
780 W_thpi 4.0 19.850000 1.2714304019e+00
781 W_thpi 4.0 19.900000 1.2714314612e+00
782 W_thpi 4.0 19.950000 1.2714325213e+00
783 W_thpi 4.0 20.000000 1.2714335823e+00
784 W_thzero 4.0 0.500000 1.3187897722e+00
785 W_thzero 4.0 0.550000 1.3028692332e+00
786 W_thzero 4.0 0.600000 1.2922998396e+00
787 W_thzero 4.0 0.650000 1.2852592144e+00
788 W_thzero 4.0 0.700000 1.2805587783e+00
789 W_thzero 4.0 0.750000 1.2774161613e+00
790 W_thzero 4.0 0.800000 1.2753131760e+00
791 W_thzero 4.0 0.850000 1.2739051776e+00
792 W_thzero 4.0 0.900000 1.2729623008e+00
793 W_thzero 4.0 0.950000 1.2723309451e+00
794 W_thzero 4.0 1.000000 1.2719083417e+00
795 W_thzero 4.0 1.050000 1.2716256734e+00
796 W_thzero 4.0 1.100000 1.2714368315e+00
797 W_thzero 4.0 1.150000 1.2713109109e+00
798 W_thzero 4.0 1.200000 1.2712271914e+00
799 W_thzero 4.0 1.250000 1.2711717788e+00
800 W_thzero 4.0 1.300000 1.2711353553e+00
801 W_thzero 4.0 1.350000 1.2711116713e+00
802 W_thzero 4.0 1.400000 1.2710965352e+00
803 W_thzero 4.0 1.450000 1.2710871353e+00
804 W_thzero 4.0 1.500000 1.2710815857e+00
805 W_thzero 4.0 1.550000 1.2710786212e+00
806 W_thzero 4.0 1.600000 1.2710773931e+00
807 W_thzero 4.0 1.650000 1.2710773322e+00
808 W_thzero 4.0 1.700000 1.2710780564e+00
809 W_thzero 4.0 1.750000 1.2710793096e+00
810 W_thzero 4.0 1.800000 1.2710809196e+00
811 W_thzero 4.0 1.850000 1.2710827711e+00
812 W_thzero 4.0 1.900000 1.2710847866e+00
813 W_thzero 4.0 1.950000 1.2710869141e+00
814 W_thzero 4.0 2.000000 1.2710891186e+00
815 W_thzero 4.0 2.050000 1.2710913765e+00
816 W_thzero 4.0 2.100000 1.2710936722e+00
817 W_thzero 4.0 2.150000 1.2710959948e+00
818 W_thzero 4.0 2.200000 1.2710983371e+00
819 W_thzero 4.0 2.250000 1.2711006943e+00
820 W_thzero 4.0 2.300000 1.2711030629e+00
821 W_thzero 4.0 2.350000 1.2711054408e+00
822 W_thzero 4.0 2.400000 1.2711078262e+00
823 W_thzero 4.0 2.450000 1.2711102180e+00
824 W_thzero 4.0 2.500000 1.2711126155e+00
825 W_thzero 4.0 2.550000 1.2711150179e+00
826 W_thzero 4.0 2.600000 1.2711174249e+00
827 W_thzero 4.0 2.650000 1.2711198361e+00
828 W_thzero 4.0 2.700000 1.2711222511e+00
829 W_thzero 4.0 2.750000 1.2711246697e+00
830 W_thzero 4.0 2.800000 1.2711270917e+00
831 W_thzero 4.0 2.850000 1.2711295168e+00
832 W_thzero 4.0 2.900000 1.2711319449e+00
833 W_thzero 4.0 2.950000 1.2711343757e+00
834 W_thzero 4.0 3.000000 1.2711368091e+00
835 W_thzero 4.0 3.050000 1.2711392450e+00
836 W_thzero 4.0 3.100000 1.2711416830e+00
837 W_thzero 4.0 3.150000 1.2711441232e+00
838 W_thzero 4.0 3.200000 1.2711465652e+00
839 W_thzero 4.0 3.250000 1.2711490090e+00
840 W_thzero 4.0 3.300000 1.2711514543e+00
841 W_thzero 4.0 3.350000 1.2711539010e+00
842 W_thzero 4.0 3.400000 1.2711563490e+00
843 W_thzero 4.0 3.450000 1.2711587980e+00
844 W_thzero 4.0 3.500000 1.2711612480e+00
845 W_thzero 4.0 3.550000 1.2711636988e+00
846 W_thzero 4.0 3.600000 1.2711661502e+00
847 W_thzero 4.0 3.650000 1.2711686020e+00
848 W_thzero 4.0 3.700000 1.2711710541e+00
849 W_thzero 4.0 3.750000 1.2711735065e+00
850 W_thzero 4.0 3.800000 1.2711759588e+00
851 W_thzero 4.0 3.850000 1.2711784110e+00
852 W_thzero 4.0 3.900000 1.2711808629e+00
853 W_thzero 4.0 3.950000 1.2711833144e+00
854 W_thzero 4.0 4.000000 1.2711857653e+00
855 W_thzero 4.0 4.050000 1.2711882155e+00
856 W_thzero 4.0 4.100000 1.2711906649e+00
857 W_thzero 4.0 4.150000 1.2711931132e+00
858 W_thzero 4.0 4.200000 1.2711955605e+00
859 W_thzero 4.0 4.250000 1.2711980065e+00
860 W_thzero 4.0 4.300000 1.2712004511e+00
861 W_thzero 4.0 4.350000 1.2712028942e+00
862 W_thzero 4.0 4.400000 1.2712053356e+00
863 W_thzero 4.0 4.450000 1.2712077752e+00
864 W_thzero 4.0 4.500000 1.2712102129e+00
865 W_thzero 4.0 4.550000 1.2712126486e+00
866 W_thzero 4.0 4.600000 1.2712150821e+00
867 W_thzero 4.0 4.650000 1.2712175133e+00
868 W_thzero 4.0 4.700000 1.2712199421e+00
869 W_thzero 4.0 4.750000 1.2712223684e+00
870 W_thzero 4.0 4.800000 1.2712247921e+00
871 W_thzero 4.0 4.850000 1.2712272129e+00
872 W_thzero 4.0 4.900000 1.2712296309e+00
873 W_thzero 4.0 4.950000 1.2712320459e+00
874 W_thzero 4.0 5.000000 1.2712344578e+00
875 W_thzero 4.0 5.050000 1.2712368665e+00
876 W_thzero 4.0 5.100000 1.2712392719e+00
877 W_thzero 4.0 5.150000 1.2712416738e+00
878 W_thzero 4.0 5.200000 1.2712440722e+00
879 W_thzero 4.0 5.250000 1.2712464670e+00
880 W_thzero 4.0 5.300000 1.2712488580e+00
881 W_thzero 4.0 5.350000 1.2712512452e+00
882 W_thzero 4.0 5.400000 1.2712536284e+00
883 W_thzero 4.0 5.450000 1.2712560076e+00
884 W_thzero 4.0 5.500000 1.2712583826e+00
885 W_thzero 4.0 5.550000 1.2712607535e+00
886 W_thzero 4.0 5.600000 1.2712631200e+00
887 W_thzero 4.0 5.650000 1.2712654820e+00
888 W_thzero 4.0 5.700000 1.2712678396e+00
889 W_thzero 4.0 5.750000 1.2712701926e+00
890 W_thzero 4.0 5.800000 1.2712725409e+00
891 W_thzero 4.0 5.850000 1.2712748844e+00
892 W_thzero 4.0 5.900000 1.2712772230e+00
893 W_thzero 4.0 5.950000 1.2712795568e+00
894 W_thzero 4.0 6.000000 1.2712818855e+00
895 W_thzero 4.0 6.050000 1.2712842091e+00
896 W_thzero 4.0 6.100000 1.2712865275e+00
897 W_thzero 4.0 6.150000 1.2712888407e+00
898 W_thzero 4.0 6.200000 1.2712911485e+00
899 W_thzero 4.0 6.250000 1.2712934510e+00
900 W_thzero 4.0 6.300000 1.2712957479e+00
901 W_thzero 4.0 6.350000 1.2712980394e+00
902 W_thzero 4.0 6.400000 1.2713003251e+00
903 W_thzero 4.0 6.450000 1.2713026053e+00
904 W_thzero 4.0 6.500000 1.2713048796e+00
905 W_thzero 4.0 6.550000 1.2713071481e+00
906 W_thzero 4.0 6.600000 1.2713094108e+00
907 W_thzero 4.0 6.650000 1.2713116675e+00
908 W_thzero 4.0 6.700000 1.2713139182e+00
909 W_thzero 4.0 6.750000 1.2713161628e+00
910 W_thzero 4.0 6.800000 1.2713184013e+00
911 W_thzero 4.0 6.850000 1.2713206336e+00
912 W_thzero 4.0 6.900000 1.2713228596e+00
913 W_thzero 4.0 6.950000 1.2713250794e+00
914 W_thzero 4.0 7.000000 1.2713272928e+00
915 W_thzero 4.0 7.050000 1.2713294998e+00
916 W_thzero 4.0 7.100000 1.2713317003e+00
917 W_thzero 4.0 7.150000 1.2713338943e+00
918 W_thzero 4.0 7.200000 1.2713360817e+00
919 W_thzero 4.0 7.250000 1.2713382626e+00
920 W_thzero 4.0 7.300000 1.2713404368e+00
921 W_thzero 4.0 7.350000 1.2713426043e+00
922 W_thzero 4.0 7.400000 1.2713447650e+00
923 W_thzero 4.0 7.450000 1.2713469189e+00
924 W_thzero 4.0 7.500000 1.2713490660e+00
925 W_thzero 4.0 7.550000 1.2713512063e+00
926 W_thzero 4.0 7.600000 1.2713533396e+00
927 W_thzero 4.0 7.650000 1.2713554660e+00
928 W_thzero 4.0 7.700000 1.2713575853e+00
929 W_thzero 4.0 7.750000 1.2713596977e+00
930 W_thzero 4.0 7.800000 1.2713618030e+00
931 W_thzero 4.0 7.850000 1.2713639011e+00
932 W_thzero 4.0 7.900000 1.2713659922e+00
933 W_thzero 4.0 7.950000 1.2713680761e+00
934 W_thzero 4.0 8.000000 1.2713701527e+00
935 W_thzero 4.0 8.050000 1.2713722222e+00
936 W_thzero 4.0 8.100000 1.2713742844e+00
937 W_thzero 4.0 8.150000 1.2713763393e+00
938 W_thzero 4.0 8.200000 1.2713783869e+00
939 W_thzero 4.0 8.250000 1.2713804271e+00
940 W_thzero 4.0 8.300000 1.2713824600e+00
941 W_thzero 4.0 8.350000 1.2713844854e+00
942 W_thzero 4.0 8.400000 1.2713865035e+00
943 W_thzero 4.0 8.450000 1.2713885141e+00
944 W_thzero 4.0 8.500000 1.2713905172e+00
945 W_thzero 4.0 8.550000 1.2713925129e+00
946 W_thzero 4.0 8.600000 1.2713945010e+00
947 W_thzero 4.0 8.650000 1.2713964817e+00
948 W_thzero 4.0 8.700000 1.2713984547e+00
949 W_thzero 4.0 8.750000 1.2714004203e+00
950 W_thzero 4.0 8.800000 1.2714023782e+00
951 W_thzero 4.0 8.850000 1.2714043285e+00
952 W_thzero 4.0 8.900000 1.2714062712e+00
953 W_thzero 4.0 8.950000 1.2714082063e+00
954 W_thzero 4.0 9.000000 1.2714101338e+00
955 W_thzero 4.0 9.050000 1.2714120536e+00
956 W_thzero 4.0 9.100000 1.2714139657e+00
957 W_thzero 4.0 9.150000 1.2714158701e+00
958 W_thzero 4.0 9.200000 1.2714177668e+00
959 W_thzero 4.0 9.250000 1.2714196559e+00
960 W_thzero 4.0 9.300000 1.2714215372e+00
961 W_thzero 4.0 9.350000 1.2714234108e+00
962 W_thzero 4.0 9.400000 1.2714252767e+00
963 W_thzero 4.0 9.450000 1.2714271348e+00
964 W_thzero 4.0 9.500000 1.2714289852e+00
965 W_thzero 4.0 9.550000 1.2714308279e+00
966 W_thzero 4.0 9.600000 1.2714326628e+00
967 W_thzero 4.0 9.650000 1.2714344899e+00
968 W_thzero 4.0 9.700000 1.2714363093e+00
969 W_thzero 4.0 9.750000 1.2714381209e+00
970 W_thzero 4.0 9.800000 1.2714399247e+00
971 W_thzero 4.0 9.850000 1.2714417207e+00
972 W_thzero 4.0 9.900000 1.2714435090e+00
973 W_thzero 4.0 9.950000 1.2714452895e+00
974 W_thzero 4.0 10.000000 1.2714470622e+00
975 W_thzero 4.0 10.050000 1.2714488272e+00
976 W_thzero 4.0 10.100000 1.2714505843e+00
977 W_thzero 4.0 10.150000 1.2714523337e+00
978 W_thzero 4.0 10.200000 1.2714540753e+00
979 W_thzero 4.0 10.250000 1.2714558092e+00
980 W_thzero 4.0 10.300000 1.2714575352e+00
981 W_thzero 4.0 10.350000 1.2714592535e+00
982 W_thzero 4.0 10.400000 1.2714609641e+00
983 W_thzero 4.0 10.450000 1.2714626669e+00
984 W_thzero 4.0 10.500000 1.2714643619e+00
985 W_thzero 4.0 10.550000 1.2714660492e+00
986 W_thzero 4.0 10.600000 1.2714677287e+00
987 W_thzero 4.0 10.650000 1.2714694005e+00
988 W_thzero 4.0 10.700000 1.2714710646e+00
989 W_thzero 4.0 10.750000 1.2714727209e+00
990 W_thzero 4.0 10.800000 1.2714743695e+00
991 W_thzero 4.0 10.850000 1.2714760105e+00
992 W_thzero 4.0 10.900000 1.2714776437e+00
993 W_thzero 4.0 10.950000 1.2714792692e+00
994 W_thzero 4.0 11.000000 1.2714808871e+00
995 W_thzero 4.0 11.050000 1.2714824973e+00
996 W_thzero 4.0 11.100000 1.2714840998e+00
997 W_thzero 4.0 11.150000 1.2714856947e+00
998 W_thzero 4.0 11.200000 1.2714872819e+00
999 W_thzero 4.0 11.250000 1.2714888616e+00
1000 W_thzero 4.0 11.300000 1.2714904336e+00
1001 W_thzero 4.0 11.350000 1.2714919980e+00

E-016-herglotz-fine-structure.json — 3.0 KB, updated 08-18-2026

JSON sidecar (click to expand)
{
  "experiment": "E-016",
  "task": "Q-S3c: Herglotz fine structure of W at theta=pi vs F",
  "description": "Poisson-smoothed zero density -(1/pi) Im W'/W(iy) at theta=pi (and theta=0 control) vs rho_F; analytic Galerkin z-derivative; zero-Poisson reconstruction cross-check",
  "script": "research/numerics/scripts/E-016-herglotz-fine-structure.py",
  "parameters": {
    "a_sweep": [
      4.0,
      6.0,
      8.0,
      10.0
    ],
    "h": 0.01,
    "lambda": -1.0,
    "y_grid": [
      0.5,
      20.0,
      391
    ],
    "z_max_zeros": 300.0
  },
  "checks": {
    "V1_plateau_density": true,
    "V2_rhoF_finitediff": true,
    "V3_poisson_reconstruction": false,
    "V4_vmirror_symmetry": true
  },
  "key_values": {
    "xi_flint_crosscheck_rel": 8.821833278620677e-17,
    "rhoF_finitediff_max_rel": 1.3322584092623682e-08,
    "metrics": {
      "4.0": {
        "n_zeros": 381,
        "z1": 1.1260734006983593,
        "plateau": 1.2713747663068067,
        "density_a_over_pi": 1.2732395447351628,
        "plateau_rel_dev": 0.0014645935527740487,
        "v3_rel": 0.32451368257591473,
        "kappa_shift": -0.21982980149584136,
        "d_pi": 1.2200734562385358,
        "d_zero": 1.2165204320831793
      },
      "6.0": {
        "n_zeros": 572,
        "z1": 0.7499016225074712,
        "plateau": 1.9083309455490012,
        "density_a_over_pi": 1.909859317102744,
        "plateau_rel_dev": 0.00080025347419903,
        "v3_rel": 0.2938167612479611,
        "kappa_shift": -0.39086861455767985,
        "d_pi": 1.855357135046592,
        "d_zero": 1.8529753375094085
      },
      "8.0": {
        "n_zeros": 763,
        "z1": 0.5621012628096893,
        "plateau": 2.5451204974114527,
        "density_a_over_pi": 2.5464790894703255,
        "plateau_rel_dev": 0.0005335178539225225,
        "v3_rel": 0.2792472337188209,
        "kappa_shift": -0.5618837715660804,
        "d_pi": 2.4914430957151077,
        "d_zero": 2.489482228965594
      },
      "10.0": {
        "n_zeros": 954,
        "z1": 0.44959700551214055,
        "plateau": 3.1817851862991344,
        "density_a_over_pi": 3.183098861837907,
        "plateau_rel_dev": 0.00041270334218086014,
        "v3_rel": 0.27086948306792724,
        "kappa_shift": -0.7328752211905654,
        "d_pi": 3.127620084707738,
        "d_zero": 3.126136732274815
      }
    },
    "vmirror_sym_err": 3.797860165317667e-14
  },
  "caveats": [
    "Galerkin discretization h=0.01 (E-010 h-convergence: z1 rel drift 4e-4 between h=0.01 and 0.005 at a=4)",
    "Poisson smoothing at height y averages over scale ~y: lattice oscillations at spacing pi/a are suppressed ~e^{-2ay}; the sensitive region is y <~ few (low zeros resolve individually)",
    "theta=pi vs theta=0 comparison is the sharp test of the H4 read-off (D-023): if theta=pi is correct, d_pi should lie systematically below d_zero as a grows"
  ],
  "elapsed_seconds": 32.7,
  "timestamp_utc": "2026-08-18T10:57:35.113504+00:00",
  "row_count": 3520
}

Source code

Python script (click to expand)
"""E-016 — Q-S3c: Herglotz (Poisson) fine structure of W at theta=pi vs F.

Theory (D-023 §4, item 3): for entire W with ALL REAL zeros z_j,
  -Im(W'/W)(iy) = -Im(kappa) + sum_j y/(y^2 + z_j^2)
is (pi times) the Poisson-smoothed zero density at height y. Individual
zeros within |z_j| <~ y leave distinguishable fingerprints, so this
diagnostic detects sub-lattice-scale zero redistribution BEFORE the
density collapses (Cor 1.6 requires the a->inf zeros to become the
gamma_j / xi'-zeros of F = z^2 xi(1/2-iz)/xi'(1/2-iz)).

For F on the imaginary axis (z = iy, s = 1/2+y real):
  rho_F(y) := -(1/pi) Im F'/F(iy)
           = (1/pi)[ 2/y + xi'/xi(1/2+y) - xi''/xi'(1/2+y) ].
Equivalently rho_F(y) = (1/pi) d/dy log|F(iy)|  (finite-diff check V2).

Diagnostics per a in {4,6,8,10} (h=0.01, lambda=-1, theta=pi; theta=0
control):
  D1. rho_W(y; a, pi) on y in [0.5, 20] via the ANALYTIC z-derivative of
      the Galerkin Fourier representation (no finite differences):
        V(z)  = hat(z) sum c_j e^{i z x_j}
        V'(z) = hat'(z) sum c_j e^{i z x_j} + hat(z) sum (i x_j) c_j e^{i z x_j}
        W(z)  = (z-i) Vp + e^{i theta} (z+i) Vm   (and z-derivative).
  D2. rho_F(y) analytic; cross-checked vs finite differences of
      log|F(iy)| (V2).
  D3. Zero-Poisson reconstruction: zeros of W(.,pi) located on the real
      axis (|W|-minima polished); rho from the Poisson sum must match D1
      up to the additive constant -Im(kappa)/pi (mean-matched over the
      window) — validates the derivative machinery (V3).
  D4. Metrics vs a: plateau value vs a/pi (density law); L2 distance
      d(a,theta) = ||rho_W - rho_F|| on [1,20] (theta=pi vs theta=0 —
      does theta=pi actually sharpen the approach?); oscillation
      envelope of rho_W at small y.

Checks:
  V1. plateau: |mean rho_W(y in [10,20]) - a/pi| / (a/pi) < 0.05.
  V2. rho_F analytic vs finite-diff of log|F|: max rel dev < 1e-6.
  V3. Poisson reconstruction from located zeros matches D1 (mean-matched
      L2 / rms < 0.02).
  V4. mirror symmetry v-(x) = v+(-x) rel err < 1e-6 (machinery regression).

Outputs: research/numerics/data/E-016-herglotz-fine-structure.csv (+ .json)
"""
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
from numpy.polynomial.legendre import leggauss

REPO = Path(__file__).resolve().parents[3]
DATA = REPO / "research" / "numerics" / "data"
CSV = DATA / "E-016-herglotz-fine-structure.csv"
JSON = DATA / "E-016-herglotz-fine-structure.json"

T_MAXG = 20.0            # sieve to e^20 covers 2a <= 20 (a <= 10)
T_LERCH = 0.05
GL_N = 8
A_SWEEP = [4.0, 6.0, 8.0, 10.0]
H_MAIN = 0.01
LAM_SHIFT = -1.0
Y_GRID = np.linspace(0.5, 20.0, 391)
Y_PLATEAU = (10.0, 20.0)
Z_MAX_ZERO = 300.0
N_GRID = 40000


# ---------------------------------------------------------- g (as E-014)
def mangoldt_sieve_fast(n_max: int) -> np.ndarray:
    is_comp = np.zeros(n_max + 1, dtype=bool)
    for p in range(2, int(n_max ** 0.5) + 1):
        if not is_comp[p]:
            is_comp[p * p::p] = True
    lam_log = np.zeros(n_max + 1)
    primes = np.flatnonzero(~is_comp[2:]) + 2
    lp = np.log(primes)
    pk = primes.copy()
    while pk.size and pk[0] <= n_max:
        lam_log[pk] = lp
        pk = pk * primes[: pk.size]
        keep = pk <= n_max
        pk = pk[keep]
        lp = lp[keep]
    return lam_log


print("sieving von Mangoldt to e^20 ...", flush=True)
t_sv = time.time()
N_MAXG = int(np.exp(T_MAXG)) + 2
LAM_LOG = mangoldt_sieve_fast(N_MAXG)
NS = np.arange(2, N_MAXG + 1, dtype=np.float64)
LAM = LAM_LOG[2:] / np.sqrt(NS)
LOG_NS = np.log(NS)
C1 = np.cumsum(LAM)
C0 = np.cumsum(LAM * LOG_NS)
del LAM, LOG_NS, NS
print(f"  sieve done: {time.time()-t_sv:.0f}s", flush=True)

mp.mp.dps = 30
DIG_COEFF = float(-(mp.digamma(mp.mpf(1) / 4) - mp.log(mp.pi)) / 2)
PHI1 = float(mp.lerchphi(1, 2, mp.mpf(1) / 4))
KK = np.arange(0, 400)
DENOM = (KK + 0.25) ** 2


def prime_sum_vec(t):
    m = np.floor(np.exp(t) + 1e-9).astype(np.int64) - 1
    out = np.zeros_like(t)
    pos = m > 0
    idx = m[pos] - 1
    out[pos] = C1[idx] * t[pos] - C0[idx]
    return out


def lerch_comb(t):
    out = np.empty_like(t)
    fast = t > T_LERCH
    if fast.any():
        z = np.exp(-2.0 * t[fast])
        phi = (np.power.outer(z, KK) / DENOM).sum(axis=1)
        out[fast] = -0.25 * (PHI1 - np.exp(-t[fast] / 2) * phi)
    if (~fast).any():
        for i in np.flatnonzero(~fast):
            ti = mp.mpf(float(t[i]))
            out[i] = float(-0.25 * (mp.lerchphi(1, 2, mp.mpf(1) / 4)
                                    - mp.exp(-ti / 2)
                                    * mp.lerchphi(mp.exp(-2 * ti), 2,
                                                  mp.mpf(1) / 4)))
    return out


def g_float(t):
    t = np.asarray(t, dtype=float)
    g = -4.0 * (np.exp(t / 2) + np.exp(-t / 2) - 2.0)
    g += prime_sum_vec(t)
    g += DIG_COEFF * t
    g += lerch_comb(t)
    g[t == 0.0] = 0.0
    return g


A_CONST = 0.5 * (np.log(2 * np.pi) + np.euler_gamma - 1.0)


def sigma_vec(t):
    t = np.asarray(t, dtype=float)
    with np.errstate(divide="ignore", invalid="ignore"):
        return np.where(t > 0, 0.5 * t * np.log(t) + A_CONST * t, 0.0)


def F_sing(t):
    if t <= 0:
        return 0.0
    return (A_CONST * t**3 / 6.0 + t**3 * np.log(t) / 12.0
            - 5.0 * t**3 / 72.0)


def S_sing(k, h):
    return (F_sing((k + 1) * h) - 2.0 * F_sing(k * h)
            + F_sing(abs(k - 1) * h))


XN, XW = leggauss(GL_N)


def S_full(k, h):
    def quad_plain(lo, hi, peak):
        tot = 0.0
        for a, b in ((lo, peak), (peak, hi)):
            if b - a <= 0:
                continue
            mid, half = 0.5 * (a + b), 0.5 * (b - a)
            xs = mid + half * XN
            rho = g_float(xs) - sigma_vec(xs)
            tot += half * float(np.dot(XW, (h - np.abs(xs - peak)) * rho))
        return tot

    def 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:
            return quad_plain(lo, hi, peak)
        pts = 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})
        tot = 0.0
        for p0, p1 in zip(pts, pts[1:]):
            if p1 - p0 <= 0:
                continue
            mid, half = 0.5 * (p0 + p1), 0.5 * (p1 - p0)
            xs = mid + half * XN
            rho = g_float(xs) - sigma_vec(xs)
            tot += half * float(np.dot(XW, (h - np.abs(xs - peak)) * rho))
        return tot

    if k == 0:
        return S_sing(0, h) + 2.0 * quad(0.0, h, 0.0)
    return S_sing(k, h) + quad((k - 1) * h, (k + 1) * h, k * h)


def stiffness_first_col(n_elem, h):
    n_q = n_elem - 1
    s = np.array([S_full(k, h) for k in range(n_elem)])
    q = np.empty(n_q)
    q[0] = (2.0 * s[0] - 2.0 * s[1]) / h**2
    for k in range(1, n_q):
        q[k] = (2.0 * s[k] - s[k + 1] - s[k - 1]) / h**2
    return q


_BUILD = {}


def build(a, h):
    if (a, h) in _BUILD:
        return _BUILD[(a, h)]
    n_elem = int(round(2 * a / h))
    n = n_elem - 1
    q = stiffness_first_col(n_elem, h)
    Q = scipy.linalg.toeplitz(q)
    M = scipy.linalg.toeplitz(np.r_[2 * h / 3, h / 6,
                                    np.zeros(max(n - 2, 0))])
    ii = np.arange(1, n_elem)
    x = -a + ii * h
    xg, wg = leggauss(8)
    b = {}
    for sgn in (+1.0, -1.0):
        mid1 = x - h / 2
        xs1 = mid1[:, None] + (h / 2) * xg[None, :]
        phi1 = (xs1 - (x - h)[:, None]) / h
        mid2 = x + h / 2
        xs2 = mid2[:, None] + (h / 2) * xg[None, :]
        phi2 = ((x + h)[:, None] - xs2) / h
        b[sgn] = ((h / 2) * (np.exp(sgn * xs1) * phi1) @ wg
                  + (h / 2) * (np.exp(sgn * xs2) * phi2) @ wg)
    _BUILD[(a, h)] = (x, h, Q, M, b)
    return _BUILD[(a, h)]


def solve_v(Q, M, b_s, lam, n):
    T = Q - lam * M
    e = np.ones(n)
    B = np.zeros((n + 1, n + 1))
    B[:n, :n] = T
    B[:n, n] = e
    B[n, :n] = e
    sol = scipy.linalg.solve(B, np.r_[b_s, 0.0], assume_a="sym")
    return sol[:n], T


# ------------------------------------------- V(z), V'(z), W(z), W'(z)
def hat_FT(z, h):
    return h * np.sinc(z * h / (2 * np.pi)) ** 2


def hat_FT_d(z, h):
    """d/dz [h sinc(zh/2pi)^2], sinc(x)=sin(pi x)/(pi x)."""
    u = z * h / 2.0
    s = np.sinc(z * h / (2 * np.pi))          # sin(u)/u
    with np.errstate(divide="ignore", invalid="ignore"):
        ds = np.where(np.abs(u) > 1e-8,
                      (u * np.cos(u) - np.sin(u)) / u**2,
                      -u / 3.0)
    return h**2 * s * ds                      # d/dz[h s^2] = h^2 s ds/du


def V_and_dV(z, c, x, h):
    E = np.exp(1j * np.outer(z, x))
    S1 = E @ c
    S2 = (1j * x * E) @ c
    return hat_FT(z, h) * S1, hat_FT_d(z, h) * S1 + hat_FT(z, h) * S2


def W_and_dW(z, Vp, dVp, Vm, dVm, theta):
    eit = np.exp(1j * theta)
    W = (z - 1j) * Vp + eit * (z + 1j) * Vm
    dW = Vp + (z - 1j) * dVp + eit * (Vm + (z + 1j) * dVm)
    return W, dW


# --------------------------------------------------------------- F side
def xi_real(s):
    s = mp.mpf(s)
    if s == 1:                       # xi(1) = 1/2 (removable: zeta pole
        return mp.mpf(0.5)           # cancels the (s-1) factor)
    return 0.5 * s * (s - 1) * mp.pi ** (-s / 2) * mp.gamma(s / 2) * mp.zeta(s)


mp.mp.dps = 40


def rho_F_analytic(y):
    """rho_F(y) = (1/pi)[2/y + xi'/xi(1/2+y) - xi''/xi'(1/2+y)]."""
    s = mp.mpf(0.5) + mp.mpf(y)
    f = lambda t: xi_real(t)
    x0 = xi_real(s)
    x1 = mp.diff(f, s)
    x2 = mp.diff(f, s, 2)
    return float((2.0 / mp.mpf(y) + x1 / x0 - x2 / x1) / mp.pi)


def logabs_F_imag(y):
    s = mp.mpf(0.5) + mp.mpf(y)
    xiv = xi_real(s)
    dx = mp.diff(xi_real, s)
    return mp.log(abs(-mp.mpf(y) ** 2 * xiv / dx))


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

    # ---- F side
    print("F side: rho_F analytic + finite-diff cross-check ...", flush=True)
    # flint cross-check of xi_real (mpmath zeta is broken beyond ~16-19
    # digits in this env; E-014 verified 1e-8 at s=2.5,10.5 — extend to
    # the y-range endpoints used here)
    import flint
    flint.ctx.prec = 200
    def xi_flint(s):
        aa = flint.arb(str(s))
        return float(0.5 * aa * (aa - 1) * (aa / 2).gamma()
                     * flint.arb.pi() ** (-aa / 2) * aa.zeta())
    xi_err = float(max(abs(xi_real(s) - xi_flint(s)) / abs(xi_flint(s))
                       for s in (1.5, 10.5, 20.5)))  # s=1: arb zeta pole
                                                     # (xi(1)=1/2 exact)
    print(f"  xi vs flint max rel err: {xi_err:.2e}", flush=True)
    rhoF = np.array([rho_F_analytic(y) for y in Y_GRID])
    dlogF = np.array([
        float((logabs_F_imag(mp.mpf(y) + mp.mpf(1e-4))
               - logabs_F_imag(mp.mpf(y) - mp.mpf(1e-4))) / mp.mpf(2e-4))
        for y in Y_GRID]) / np.pi
    rel = np.abs(rhoF - dlogF) / np.maximum(np.abs(rhoF), 1e-12)
    v2_err = float(rel.max())
    print(f"  V2 finite-diff max rel dev: {v2_err:.2e}", flush=True)

    rows = []
    for y, r in zip(Y_GRID, rhoF):
        rows.append(f"F,{y:.6f},{r:.10e}")

    sym_err = 0.0
    metrics = {}
    for a in A_SWEEP:
        print(f"a={a}: solve v±, Herglotz densities ...", flush=True)
        x, hh, Q, M, b = build(a, H_MAIN)
        n = len(x)
        cp, T = solve_v(Q, M, b[+1.0], LAM_SHIFT, n)
        cm, _ = solve_v(Q, M, b[-1.0], LAM_SHIFT, n)
        np_ = float(cp @ T @ cp)
        nm = float(cm @ T @ cm)
        cm = cm * np.sqrt(np_ / nm)
        sym_err = max(sym_err,
                      float(np.max(np.abs(cm - cp[::-1]))
                            / max(1.0, float(np.max(np.abs(cp))))))

        ziy = 1j * Y_GRID
        Vp, dVp = V_and_dV(ziy, cp, x, hh)
        Vm, dVm = V_and_dV(ziy, cm, x, hh)

        out = {}
        for th, tag in ((np.pi, "pi"), (0.0, "zero")):
            W, dW = W_and_dW(ziy, Vp, dVp, Vm, dVm, th)
            rhoW = -np.imag(dW / W) / np.pi
            out[tag] = rhoW
            for y, r in zip(Y_GRID, rhoW):
                rows.append(f"W_th{tag},{a},{y:.6f},{r:.10e}")

        # ---- zeros of W(., pi) on the real axis (for V3)
        # c = sqrt(np_/nm) = 1 exactly (mirror symmetry), so for real z,
        # Vm = conj(Vp) and W(z) = 2i*g(z) with the REAL gauge
        # g(z) = z Im Vp - Re Vp. Zeros = sign changes of g -> brentq.
        assert abs(np_ / nm - 1.0) < 1e-12, "norm asymmetry breaks gauge"
        zg = np.linspace(1e-3, Z_MAX_ZERO, N_GRID)
        Vpr, _ = V_and_dV(zg, cp, x, hh)
        g = zg * Vpr.imag - Vpr.real

        def g_direct(zz):
            V = hat_FT(np.array([zz]), hh)[0] * complex(
                np.exp(1j * zz * x) @ cp)
            return zz * V.imag - V.real

        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
        zeros = np.array(zeros)

        # V3: Poisson reconstruction (+- symmetric located zeros to
        # Z_MAX_ZERO + Euler-Maclaurin lattice tail beyond, spacing pi/a,
        # phase matched to last located zero; mean-matched vs analytic).
        d_lat = np.pi / a
        z_last = zeros[-1] + d_lat / 2.0
        recon = np.empty_like(Y_GRID)
        for k, y in enumerate(Y_GRID):
            tail = (y / d_lat) * (np.pi / 2.0 - np.arctan(z_last / y))
            recon[k] = (2.0 * (np.sum(y / (y**2 + zeros**2)) + tail)) / np.pi
        rhoW = out["pi"]
        shift = float(np.mean(rhoW - recon))
        rms = float(np.sqrt(np.mean(rhoW**2)))
        v3_rel = float(np.sqrt(np.mean((rhoW - recon - shift)**2)) / rms)

        # D4 metrics
        pm = (Y_GRID >= Y_PLATEAU[0]) & (Y_GRID <= Y_PLATEAU[1])
        plateau = float(np.mean(rhoW[pm]))
        dens = a / np.pi
        sel = Y_GRID >= 1.0
        d_pi = float(np.sqrt(np.mean((out["pi"][sel] - rhoF[sel])**2)))
        d_zero = float(np.sqrt(np.mean((out["zero"][sel] - rhoF[sel])**2)))
        metrics[a] = {
            "n_zeros": len(zeros), "z1": float(zeros[0]) if len(zeros) else None,
            "plateau": plateau, "density_a_over_pi": dens,
            "plateau_rel_dev": abs(plateau - dens) / dens,
            "v3_rel": v3_rel, "kappa_shift": shift,
            "d_pi": d_pi, "d_zero": d_zero,
        }
        print(f"  zeros={len(zeros)} z1={metrics[a]['z1']:.4f} "
              f"plateau={plateau:.4f} (a/pi={dens:.4f}) "
              f"V3 rel={v3_rel:.2e} d_pi={d_pi:.4f} d_zero={d_zero:.4f}",
              flush=True)

    checks = {
        "V1_plateau_density": bool(all(
            metrics[a]["plateau_rel_dev"] < 0.05 for a in A_SWEEP)),
        "V2_rhoF_finitediff": bool(v2_err < 1e-6),
        "V3_poisson_reconstruction": bool(all(
            metrics[a]["v3_rel"] < 0.02 for a in A_SWEEP)),
        "V4_vmirror_symmetry": bool(sym_err < 1e-6),
    }

    with CSV.open("w", encoding="utf-8", newline="") as f:
        f.write("series,a,y,rho\n")
        for r in rows:
            parts = r.split(",")
            if parts[0] == "F":
                f.write(f"F,-,{parts[1]},{parts[2]}\n")
            else:
                f.write(f"{parts[0]},{parts[1]},{parts[2]},{parts[3]}\n")

    meta = {
        "experiment": "E-016",
        "task": "Q-S3c: Herglotz fine structure of W at theta=pi vs F",
        "description": "Poisson-smoothed zero density -(1/pi) Im W'/W(iy) "
                       "at theta=pi (and theta=0 control) vs rho_F; "
                       "analytic Galerkin z-derivative; zero-Poisson "
                       "reconstruction cross-check",
        "script": "research/numerics/scripts/E-016-herglotz-fine-structure.py",
        "parameters": {"a_sweep": A_SWEEP, "h": H_MAIN, "lambda": LAM_SHIFT,
                       "y_grid": [0.5, 20.0, 391], "z_max_zeros": Z_MAX_ZERO},
        "checks": checks,
        "key_values": {
            "xi_flint_crosscheck_rel": xi_err,
            "rhoF_finitediff_max_rel": v2_err,
            "metrics": {str(a): metrics[a] for a in A_SWEEP},
            "vmirror_sym_err": sym_err,
        },
        "caveats": [
            "Galerkin discretization h=0.01 (E-010 h-convergence: z1 rel "
            "drift 4e-4 between h=0.01 and 0.005 at a=4)",
            "Poisson smoothing at height y averages over scale ~y: lattice "
            "oscillations at spacing pi/a are suppressed ~e^{-2ay}; the "
            "sensitive region is y <~ few (low zeros resolve individually)",
            "theta=pi vs theta=0 comparison is the sharp test of the H4 "
            "read-off (D-023): if theta=pi is correct, d_pi should lie "
            "systematically below d_zero as a grows",
        ],
        "elapsed_seconds": round(time.time() - t0, 1),
        "timestamp_utc": datetime.now(timezone.utc).isoformat(),
        "row_count": None,
    }
    meta["row_count"] = sum(1 for _ in CSV.open())
    JSON.write_text(json.dumps(meta, indent=2), encoding="utf-8")
    ok = all(checks.values())
    print(f"wrote {CSV.name}, {JSON.name} — "
          f"{'ALL CHECKS PASS' if ok else 'CHECK FAILURE: ' + str(checks)}")
    return 0 if ok else 1


if __name__ == "__main__":
    raise SystemExit(main())