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 4 of 8 · 500/page · 3519 rows next →
# seriesayrho
1502 W_thpi 6.0 16.850000 1.9083393233e+00
1503 W_thpi 6.0 16.900000 1.9083399791e+00
1504 W_thpi 6.0 16.950000 1.9083406364e+00
1505 W_thpi 6.0 17.000000 1.9083412953e+00
1506 W_thpi 6.0 17.050000 1.9083419557e+00
1507 W_thpi 6.0 17.100000 1.9083426174e+00
1508 W_thpi 6.0 17.150000 1.9083432804e+00
1509 W_thpi 6.0 17.200000 1.9083439446e+00
1510 W_thpi 6.0 17.250000 1.9083446100e+00
1511 W_thpi 6.0 17.300000 1.9083452765e+00
1512 W_thpi 6.0 17.350000 1.9083459441e+00
1513 W_thpi 6.0 17.400000 1.9083466126e+00
1514 W_thpi 6.0 17.450000 1.9083472820e+00
1515 W_thpi 6.0 17.500000 1.9083479523e+00
1516 W_thpi 6.0 17.550000 1.9083486234e+00
1517 W_thpi 6.0 17.600000 1.9083492952e+00
1518 W_thpi 6.0 17.650000 1.9083499677e+00
1519 W_thpi 6.0 17.700000 1.9083506408e+00
1520 W_thpi 6.0 17.750000 1.9083513145e+00
1521 W_thpi 6.0 17.800000 1.9083519887e+00
1522 W_thpi 6.0 17.850000 1.9083526634e+00
1523 W_thpi 6.0 17.900000 1.9083533385e+00
1524 W_thpi 6.0 17.950000 1.9083540140e+00
1525 W_thpi 6.0 18.000000 1.9083546898e+00
1526 W_thpi 6.0 18.050000 1.9083553659e+00
1527 W_thpi 6.0 18.100000 1.9083560422e+00
1528 W_thpi 6.0 18.150000 1.9083567188e+00
1529 W_thpi 6.0 18.200000 1.9083573954e+00
1530 W_thpi 6.0 18.250000 1.9083580722e+00
1531 W_thpi 6.0 18.300000 1.9083587491e+00
1532 W_thpi 6.0 18.350000 1.9083594260e+00
1533 W_thpi 6.0 18.400000 1.9083601028e+00
1534 W_thpi 6.0 18.450000 1.9083607796e+00
1535 W_thpi 6.0 18.500000 1.9083614564e+00
1536 W_thpi 6.0 18.550000 1.9083621330e+00
1537 W_thpi 6.0 18.600000 1.9083628094e+00
1538 W_thpi 6.0 18.650000 1.9083634857e+00
1539 W_thpi 6.0 18.700000 1.9083641617e+00
1540 W_thpi 6.0 18.750000 1.9083648374e+00
1541 W_thpi 6.0 18.800000 1.9083655129e+00
1542 W_thpi 6.0 18.850000 1.9083661880e+00
1543 W_thpi 6.0 18.900000 1.9083668628e+00
1544 W_thpi 6.0 18.950000 1.9083675372e+00
1545 W_thpi 6.0 19.000000 1.9083682111e+00
1546 W_thpi 6.0 19.050000 1.9083688846e+00
1547 W_thpi 6.0 19.100000 1.9083695577e+00
1548 W_thpi 6.0 19.150000 1.9083702302e+00
1549 W_thpi 6.0 19.200000 1.9083709022e+00
1550 W_thpi 6.0 19.250000 1.9083715737e+00
1551 W_thpi 6.0 19.300000 1.9083722446e+00
1552 W_thpi 6.0 19.350000 1.9083729148e+00
1553 W_thpi 6.0 19.400000 1.9083735845e+00
1554 W_thpi 6.0 19.450000 1.9083742535e+00
1555 W_thpi 6.0 19.500000 1.9083749218e+00
1556 W_thpi 6.0 19.550000 1.9083755894e+00
1557 W_thpi 6.0 19.600000 1.9083762563e+00
1558 W_thpi 6.0 19.650000 1.9083769224e+00
1559 W_thpi 6.0 19.700000 1.9083775878e+00
1560 W_thpi 6.0 19.750000 1.9083782524e+00
1561 W_thpi 6.0 19.800000 1.9083789162e+00
1562 W_thpi 6.0 19.850000 1.9083795792e+00
1563 W_thpi 6.0 19.900000 1.9083802413e+00
1564 W_thpi 6.0 19.950000 1.9083809026e+00
1565 W_thpi 6.0 20.000000 1.9083815630e+00
1566 W_thzero 6.0 0.500000 1.9176532610e+00
1567 W_thzero 6.0 0.550000 1.9133484456e+00
1568 W_thzero 6.0 0.600000 1.9109889214e+00
1569 W_thzero 6.0 0.650000 1.9096947037e+00
1570 W_thzero 6.0 0.700000 1.9089845951e+00
1571 W_thzero 6.0 0.750000 1.9085949694e+00
1572 W_thzero 6.0 0.800000 1.9083812482e+00
1573 W_thzero 6.0 0.850000 1.9082640967e+00
1574 W_thzero 6.0 0.900000 1.9081999677e+00
1575 W_thzero 6.0 0.950000 1.9081649537e+00
1576 W_thzero 6.0 1.000000 1.9081459285e+00
1577 W_thzero 6.0 1.050000 1.9081356847e+00
1578 W_thzero 6.0 1.100000 1.9081302646e+00
1579 W_thzero 6.0 1.150000 1.9081274953e+00
1580 W_thzero 6.0 1.200000 1.9081261834e+00
1581 W_thzero 6.0 1.250000 1.9081256737e+00
1582 W_thzero 6.0 1.300000 1.9081256063e+00
1583 W_thzero 6.0 1.350000 1.9081257836e+00
1584 W_thzero 6.0 1.400000 1.9081260972e+00
1585 W_thzero 6.0 1.450000 1.9081264873e+00
1586 W_thzero 6.0 1.500000 1.9081269213e+00
1587 W_thzero 6.0 1.550000 1.9081273811e+00
1588 W_thzero 6.0 1.600000 1.9081278568e+00
1589 W_thzero 6.0 1.650000 1.9081283429e+00
1590 W_thzero 6.0 1.700000 1.9081288365e+00
1591 W_thzero 6.0 1.750000 1.9081293358e+00
1592 W_thzero 6.0 1.800000 1.9081298400e+00
1593 W_thzero 6.0 1.850000 1.9081303484e+00
1594 W_thzero 6.0 1.900000 1.9081308607e+00
1595 W_thzero 6.0 1.950000 1.9081313768e+00
1596 W_thzero 6.0 2.000000 1.9081318965e+00
1597 W_thzero 6.0 2.050000 1.9081324196e+00
1598 W_thzero 6.0 2.100000 1.9081329463e+00
1599 W_thzero 6.0 2.150000 1.9081334763e+00
1600 W_thzero 6.0 2.200000 1.9081340096e+00
1601 W_thzero 6.0 2.250000 1.9081345461e+00
1602 W_thzero 6.0 2.300000 1.9081350859e+00
1603 W_thzero 6.0 2.350000 1.9081356289e+00
1604 W_thzero 6.0 2.400000 1.9081361749e+00
1605 W_thzero 6.0 2.450000 1.9081367240e+00
1606 W_thzero 6.0 2.500000 1.9081372761e+00
1607 W_thzero 6.0 2.550000 1.9081378312e+00
1608 W_thzero 6.0 2.600000 1.9081383892e+00
1609 W_thzero 6.0 2.650000 1.9081389500e+00
1610 W_thzero 6.0 2.700000 1.9081395137e+00
1611 W_thzero 6.0 2.750000 1.9081400801e+00
1612 W_thzero 6.0 2.800000 1.9081406493e+00
1613 W_thzero 6.0 2.850000 1.9081412212e+00
1614 W_thzero 6.0 2.900000 1.9081417956e+00
1615 W_thzero 6.0 2.950000 1.9081423727e+00
1616 W_thzero 6.0 3.000000 1.9081429524e+00
1617 W_thzero 6.0 3.050000 1.9081435345e+00
1618 W_thzero 6.0 3.100000 1.9081441191e+00
1619 W_thzero 6.0 3.150000 1.9081447061e+00
1620 W_thzero 6.0 3.200000 1.9081452955e+00
1621 W_thzero 6.0 3.250000 1.9081458872e+00
1622 W_thzero 6.0 3.300000 1.9081464813e+00
1623 W_thzero 6.0 3.350000 1.9081470775e+00
1624 W_thzero 6.0 3.400000 1.9081476760e+00
1625 W_thzero 6.0 3.450000 1.9081482767e+00
1626 W_thzero 6.0 3.500000 1.9081488795e+00
1627 W_thzero 6.0 3.550000 1.9081494844e+00
1628 W_thzero 6.0 3.600000 1.9081500914e+00
1629 W_thzero 6.0 3.650000 1.9081507004e+00
1630 W_thzero 6.0 3.700000 1.9081513114e+00
1631 W_thzero 6.0 3.750000 1.9081519243e+00
1632 W_thzero 6.0 3.800000 1.9081525392e+00
1633 W_thzero 6.0 3.850000 1.9081531559e+00
1634 W_thzero 6.0 3.900000 1.9081537745e+00
1635 W_thzero 6.0 3.950000 1.9081543948e+00
1636 W_thzero 6.0 4.000000 1.9081550170e+00
1637 W_thzero 6.0 4.050000 1.9081556409e+00
1638 W_thzero 6.0 4.100000 1.9081562665e+00
1639 W_thzero 6.0 4.150000 1.9081568938e+00
1640 W_thzero 6.0 4.200000 1.9081575227e+00
1641 W_thzero 6.0 4.250000 1.9081581533e+00
1642 W_thzero 6.0 4.300000 1.9081587854e+00
1643 W_thzero 6.0 4.350000 1.9081594191e+00
1644 W_thzero 6.0 4.400000 1.9081600543e+00
1645 W_thzero 6.0 4.450000 1.9081606910e+00
1646 W_thzero 6.0 4.500000 1.9081613291e+00
1647 W_thzero 6.0 4.550000 1.9081619687e+00
1648 W_thzero 6.0 4.600000 1.9081626097e+00
1649 W_thzero 6.0 4.650000 1.9081632521e+00
1650 W_thzero 6.0 4.700000 1.9081638958e+00
1651 W_thzero 6.0 4.750000 1.9081645409e+00
1652 W_thzero 6.0 4.800000 1.9081651872e+00
1653 W_thzero 6.0 4.850000 1.9081658348e+00
1654 W_thzero 6.0 4.900000 1.9081664837e+00
1655 W_thzero 6.0 4.950000 1.9081671338e+00
1656 W_thzero 6.0 5.000000 1.9081677851e+00
1657 W_thzero 6.0 5.050000 1.9081684375e+00
1658 W_thzero 6.0 5.100000 1.9081690911e+00
1659 W_thzero 6.0 5.150000 1.9081697458e+00
1660 W_thzero 6.0 5.200000 1.9081704016e+00
1661 W_thzero 6.0 5.250000 1.9081710585e+00
1662 W_thzero 6.0 5.300000 1.9081717164e+00
1663 W_thzero 6.0 5.350000 1.9081723754e+00
1664 W_thzero 6.0 5.400000 1.9081730353e+00
1665 W_thzero 6.0 5.450000 1.9081736963e+00
1666 W_thzero 6.0 5.500000 1.9081743582e+00
1667 W_thzero 6.0 5.550000 1.9081750210e+00
1668 W_thzero 6.0 5.600000 1.9081756848e+00
1669 W_thzero 6.0 5.650000 1.9081763495e+00
1670 W_thzero 6.0 5.700000 1.9081770150e+00
1671 W_thzero 6.0 5.750000 1.9081776814e+00
1672 W_thzero 6.0 5.800000 1.9081783487e+00
1673 W_thzero 6.0 5.850000 1.9081790168e+00
1674 W_thzero 6.0 5.900000 1.9081796857e+00
1675 W_thzero 6.0 5.950000 1.9081803553e+00
1676 W_thzero 6.0 6.000000 1.9081810257e+00
1677 W_thzero 6.0 6.050000 1.9081816969e+00
1678 W_thzero 6.0 6.100000 1.9081823688e+00
1679 W_thzero 6.0 6.150000 1.9081830415e+00
1680 W_thzero 6.0 6.200000 1.9081837148e+00
1681 W_thzero 6.0 6.250000 1.9081843888e+00
1682 W_thzero 6.0 6.300000 1.9081850634e+00
1683 W_thzero 6.0 6.350000 1.9081857387e+00
1684 W_thzero 6.0 6.400000 1.9081864146e+00
1685 W_thzero 6.0 6.450000 1.9081870912e+00
1686 W_thzero 6.0 6.500000 1.9081877683e+00
1687 W_thzero 6.0 6.550000 1.9081884460e+00
1688 W_thzero 6.0 6.600000 1.9081891243e+00
1689 W_thzero 6.0 6.650000 1.9081898032e+00
1690 W_thzero 6.0 6.700000 1.9081904825e+00
1691 W_thzero 6.0 6.750000 1.9081911624e+00
1692 W_thzero 6.0 6.800000 1.9081918428e+00
1693 W_thzero 6.0 6.850000 1.9081925237e+00
1694 W_thzero 6.0 6.900000 1.9081932051e+00
1695 W_thzero 6.0 6.950000 1.9081938869e+00
1696 W_thzero 6.0 7.000000 1.9081945692e+00
1697 W_thzero 6.0 7.050000 1.9081952519e+00
1698 W_thzero 6.0 7.100000 1.9081959351e+00
1699 W_thzero 6.0 7.150000 1.9081966186e+00
1700 W_thzero 6.0 7.200000 1.9081973026e+00
1701 W_thzero 6.0 7.250000 1.9081979869e+00
1702 W_thzero 6.0 7.300000 1.9081986716e+00
1703 W_thzero 6.0 7.350000 1.9081993567e+00
1704 W_thzero 6.0 7.400000 1.9082000421e+00
1705 W_thzero 6.0 7.450000 1.9082007278e+00
1706 W_thzero 6.0 7.500000 1.9082014139e+00
1707 W_thzero 6.0 7.550000 1.9082021002e+00
1708 W_thzero 6.0 7.600000 1.9082027869e+00
1709 W_thzero 6.0 7.650000 1.9082034739e+00
1710 W_thzero 6.0 7.700000 1.9082041611e+00
1711 W_thzero 6.0 7.750000 1.9082048486e+00
1712 W_thzero 6.0 7.800000 1.9082055363e+00
1713 W_thzero 6.0 7.850000 1.9082062243e+00
1714 W_thzero 6.0 7.900000 1.9082069125e+00
1715 W_thzero 6.0 7.950000 1.9082076009e+00
1716 W_thzero 6.0 8.000000 1.9082082895e+00
1717 W_thzero 6.0 8.050000 1.9082089783e+00
1718 W_thzero 6.0 8.100000 1.9082096673e+00
1719 W_thzero 6.0 8.150000 1.9082103565e+00
1720 W_thzero 6.0 8.200000 1.9082110458e+00
1721 W_thzero 6.0 8.250000 1.9082117353e+00
1722 W_thzero 6.0 8.300000 1.9082124249e+00
1723 W_thzero 6.0 8.350000 1.9082131147e+00
1724 W_thzero 6.0 8.400000 1.9082138045e+00
1725 W_thzero 6.0 8.450000 1.9082144945e+00
1726 W_thzero 6.0 8.500000 1.9082151846e+00
1727 W_thzero 6.0 8.550000 1.9082158747e+00
1728 W_thzero 6.0 8.600000 1.9082165650e+00
1729 W_thzero 6.0 8.650000 1.9082172553e+00
1730 W_thzero 6.0 8.700000 1.9082179456e+00
1731 W_thzero 6.0 8.750000 1.9082186360e+00
1732 W_thzero 6.0 8.800000 1.9082193264e+00
1733 W_thzero 6.0 8.850000 1.9082200169e+00
1734 W_thzero 6.0 8.900000 1.9082207074e+00
1735 W_thzero 6.0 8.950000 1.9082213979e+00
1736 W_thzero 6.0 9.000000 1.9082220884e+00
1737 W_thzero 6.0 9.050000 1.9082227788e+00
1738 W_thzero 6.0 9.100000 1.9082234693e+00
1739 W_thzero 6.0 9.150000 1.9082241597e+00
1740 W_thzero 6.0 9.200000 1.9082248500e+00
1741 W_thzero 6.0 9.250000 1.9082255404e+00
1742 W_thzero 6.0 9.300000 1.9082262306e+00
1743 W_thzero 6.0 9.350000 1.9082269208e+00
1744 W_thzero 6.0 9.400000 1.9082276109e+00
1745 W_thzero 6.0 9.450000 1.9082283009e+00
1746 W_thzero 6.0 9.500000 1.9082289908e+00
1747 W_thzero 6.0 9.550000 1.9082296806e+00
1748 W_thzero 6.0 9.600000 1.9082303703e+00
1749 W_thzero 6.0 9.650000 1.9082310598e+00
1750 W_thzero 6.0 9.700000 1.9082317492e+00
1751 W_thzero 6.0 9.750000 1.9082324385e+00
1752 W_thzero 6.0 9.800000 1.9082331276e+00
1753 W_thzero 6.0 9.850000 1.9082338165e+00
1754 W_thzero 6.0 9.900000 1.9082345053e+00
1755 W_thzero 6.0 9.950000 1.9082351939e+00
1756 W_thzero 6.0 10.000000 1.9082358823e+00
1757 W_thzero 6.0 10.050000 1.9082365704e+00
1758 W_thzero 6.0 10.100000 1.9082372584e+00
1759 W_thzero 6.0 10.150000 1.9082379461e+00
1760 W_thzero 6.0 10.200000 1.9082386336e+00
1761 W_thzero 6.0 10.250000 1.9082393209e+00
1762 W_thzero 6.0 10.300000 1.9082400079e+00
1763 W_thzero 6.0 10.350000 1.9082406947e+00
1764 W_thzero 6.0 10.400000 1.9082413812e+00
1765 W_thzero 6.0 10.450000 1.9082420674e+00
1766 W_thzero 6.0 10.500000 1.9082427533e+00
1767 W_thzero 6.0 10.550000 1.9082434389e+00
1768 W_thzero 6.0 10.600000 1.9082441243e+00
1769 W_thzero 6.0 10.650000 1.9082448093e+00
1770 W_thzero 6.0 10.700000 1.9082454940e+00
1771 W_thzero 6.0 10.750000 1.9082461783e+00
1772 W_thzero 6.0 10.800000 1.9082468623e+00
1773 W_thzero 6.0 10.850000 1.9082475460e+00
1774 W_thzero 6.0 10.900000 1.9082482293e+00
1775 W_thzero 6.0 10.950000 1.9082489122e+00
1776 W_thzero 6.0 11.000000 1.9082495948e+00
1777 W_thzero 6.0 11.050000 1.9082502770e+00
1778 W_thzero 6.0 11.100000 1.9082509588e+00
1779 W_thzero 6.0 11.150000 1.9082516401e+00
1780 W_thzero 6.0 11.200000 1.9082523211e+00
1781 W_thzero 6.0 11.250000 1.9082530016e+00
1782 W_thzero 6.0 11.300000 1.9082536818e+00
1783 W_thzero 6.0 11.350000 1.9082543614e+00
1784 W_thzero 6.0 11.400000 1.9082550407e+00
1785 W_thzero 6.0 11.450000 1.9082557194e+00
1786 W_thzero 6.0 11.500000 1.9082563978e+00
1787 W_thzero 6.0 11.550000 1.9082570756e+00
1788 W_thzero 6.0 11.600000 1.9082577529e+00
1789 W_thzero 6.0 11.650000 1.9082584298e+00
1790 W_thzero 6.0 11.700000 1.9082591062e+00
1791 W_thzero 6.0 11.750000 1.9082597820e+00
1792 W_thzero 6.0 11.800000 1.9082604574e+00
1793 W_thzero 6.0 11.850000 1.9082611322e+00
1794 W_thzero 6.0 11.900000 1.9082618065e+00
1795 W_thzero 6.0 11.950000 1.9082624802e+00
1796 W_thzero 6.0 12.000000 1.9082631534e+00
1797 W_thzero 6.0 12.050000 1.9082638261e+00
1798 W_thzero 6.0 12.100000 1.9082644981e+00
1799 W_thzero 6.0 12.150000 1.9082651696e+00
1800 W_thzero 6.0 12.200000 1.9082658406e+00
1801 W_thzero 6.0 12.250000 1.9082665109e+00
1802 W_thzero 6.0 12.300000 1.9082671806e+00
1803 W_thzero 6.0 12.350000 1.9082678497e+00
1804 W_thzero 6.0 12.400000 1.9082685182e+00
1805 W_thzero 6.0 12.450000 1.9082691861e+00
1806 W_thzero 6.0 12.500000 1.9082698534e+00
1807 W_thzero 6.0 12.550000 1.9082705200e+00
1808 W_thzero 6.0 12.600000 1.9082711859e+00
1809 W_thzero 6.0 12.650000 1.9082718512e+00
1810 W_thzero 6.0 12.700000 1.9082725159e+00
1811 W_thzero 6.0 12.750000 1.9082731799e+00
1812 W_thzero 6.0 12.800000 1.9082738432e+00
1813 W_thzero 6.0 12.850000 1.9082745058e+00
1814 W_thzero 6.0 12.900000 1.9082751677e+00
1815 W_thzero 6.0 12.950000 1.9082758289e+00
1816 W_thzero 6.0 13.000000 1.9082764894e+00
1817 W_thzero 6.0 13.050000 1.9082771492e+00
1818 W_thzero 6.0 13.100000 1.9082778082e+00
1819 W_thzero 6.0 13.150000 1.9082784666e+00
1820 W_thzero 6.0 13.200000 1.9082791242e+00
1821 W_thzero 6.0 13.250000 1.9082797810e+00
1822 W_thzero 6.0 13.300000 1.9082804371e+00
1823 W_thzero 6.0 13.350000 1.9082810924e+00
1824 W_thzero 6.0 13.400000 1.9082817470e+00
1825 W_thzero 6.0 13.450000 1.9082824008e+00
1826 W_thzero 6.0 13.500000 1.9082830538e+00
1827 W_thzero 6.0 13.550000 1.9082837060e+00
1828 W_thzero 6.0 13.600000 1.9082843575e+00
1829 W_thzero 6.0 13.650000 1.9082850081e+00
1830 W_thzero 6.0 13.700000 1.9082856579e+00
1831 W_thzero 6.0 13.750000 1.9082863069e+00
1832 W_thzero 6.0 13.800000 1.9082869550e+00
1833 W_thzero 6.0 13.850000 1.9082876024e+00
1834 W_thzero 6.0 13.900000 1.9082882489e+00
1835 W_thzero 6.0 13.950000 1.9082888945e+00
1836 W_thzero 6.0 14.000000 1.9082895393e+00
1837 W_thzero 6.0 14.050000 1.9082901833e+00
1838 W_thzero 6.0 14.100000 1.9082908264e+00
1839 W_thzero 6.0 14.150000 1.9082914686e+00
1840 W_thzero 6.0 14.200000 1.9082921099e+00
1841 W_thzero 6.0 14.250000 1.9082927504e+00
1842 W_thzero 6.0 14.300000 1.9082933900e+00
1843 W_thzero 6.0 14.350000 1.9082940286e+00
1844 W_thzero 6.0 14.400000 1.9082946664e+00
1845 W_thzero 6.0 14.450000 1.9082953033e+00
1846 W_thzero 6.0 14.500000 1.9082959392e+00
1847 W_thzero 6.0 14.550000 1.9082965743e+00
1848 W_thzero 6.0 14.600000 1.9082972084e+00
1849 W_thzero 6.0 14.650000 1.9082978416e+00
1850 W_thzero 6.0 14.700000 1.9082984738e+00
1851 W_thzero 6.0 14.750000 1.9082991051e+00
1852 W_thzero 6.0 14.800000 1.9082997355e+00
1853 W_thzero 6.0 14.850000 1.9083003649e+00
1854 W_thzero 6.0 14.900000 1.9083009933e+00
1855 W_thzero 6.0 14.950000 1.9083016208e+00
1856 W_thzero 6.0 15.000000 1.9083022474e+00
1857 W_thzero 6.0 15.050000 1.9083028729e+00
1858 W_thzero 6.0 15.100000 1.9083034975e+00
1859 W_thzero 6.0 15.150000 1.9083041210e+00
1860 W_thzero 6.0 15.200000 1.9083047436e+00
1861 W_thzero 6.0 15.250000 1.9083053652e+00
1862 W_thzero 6.0 15.300000 1.9083059858e+00
1863 W_thzero 6.0 15.350000 1.9083066054e+00
1864 W_thzero 6.0 15.400000 1.9083072240e+00
1865 W_thzero 6.0 15.450000 1.9083078416e+00
1866 W_thzero 6.0 15.500000 1.9083084581e+00
1867 W_thzero 6.0 15.550000 1.9083090737e+00
1868 W_thzero 6.0 15.600000 1.9083096882e+00
1869 W_thzero 6.0 15.650000 1.9083103016e+00
1870 W_thzero 6.0 15.700000 1.9083109141e+00
1871 W_thzero 6.0 15.750000 1.9083115255e+00
1872 W_thzero 6.0 15.800000 1.9083121358e+00
1873 W_thzero 6.0 15.850000 1.9083127451e+00
1874 W_thzero 6.0 15.900000 1.9083133534e+00
1875 W_thzero 6.0 15.950000 1.9083139605e+00
1876 W_thzero 6.0 16.000000 1.9083145667e+00
1877 W_thzero 6.0 16.050000 1.9083151717e+00
1878 W_thzero 6.0 16.100000 1.9083157757e+00
1879 W_thzero 6.0 16.150000 1.9083163786e+00
1880 W_thzero 6.0 16.200000 1.9083169805e+00
1881 W_thzero 6.0 16.250000 1.9083175812e+00
1882 W_thzero 6.0 16.300000 1.9083181809e+00
1883 W_thzero 6.0 16.350000 1.9083187795e+00
1884 W_thzero 6.0 16.400000 1.9083193770e+00
1885 W_thzero 6.0 16.450000 1.9083199734e+00
1886 W_thzero 6.0 16.500000 1.9083205687e+00
1887 W_thzero 6.0 16.550000 1.9083211629e+00
1888 W_thzero 6.0 16.600000 1.9083217560e+00
1889 W_thzero 6.0 16.650000 1.9083223480e+00
1890 W_thzero 6.0 16.700000 1.9083229389e+00
1891 W_thzero 6.0 16.750000 1.9083235287e+00
1892 W_thzero 6.0 16.800000 1.9083241173e+00
1893 W_thzero 6.0 16.850000 1.9083247048e+00
1894 W_thzero 6.0 16.900000 1.9083252912e+00
1895 W_thzero 6.0 16.950000 1.9083258765e+00
1896 W_thzero 6.0 17.000000 1.9083264607e+00
1897 W_thzero 6.0 17.050000 1.9083270437e+00
1898 W_thzero 6.0 17.100000 1.9083276256e+00
1899 W_thzero 6.0 17.150000 1.9083282063e+00
1900 W_thzero 6.0 17.200000 1.9083287859e+00
1901 W_thzero 6.0 17.250000 1.9083293644e+00
1902 W_thzero 6.0 17.300000 1.9083299417e+00
1903 W_thzero 6.0 17.350000 1.9083305179e+00
1904 W_thzero 6.0 17.400000 1.9083310930e+00
1905 W_thzero 6.0 17.450000 1.9083316669e+00
1906 W_thzero 6.0 17.500000 1.9083322396e+00
1907 W_thzero 6.0 17.550000 1.9083328112e+00
1908 W_thzero 6.0 17.600000 1.9083333816e+00
1909 W_thzero 6.0 17.650000 1.9083339509e+00
1910 W_thzero 6.0 17.700000 1.9083345190e+00
1911 W_thzero 6.0 17.750000 1.9083350859e+00
1912 W_thzero 6.0 17.800000 1.9083356517e+00
1913 W_thzero 6.0 17.850000 1.9083362163e+00
1914 W_thzero 6.0 17.900000 1.9083367797e+00
1915 W_thzero 6.0 17.950000 1.9083373420e+00
1916 W_thzero 6.0 18.000000 1.9083379031e+00
1917 W_thzero 6.0 18.050000 1.9083384631e+00
1918 W_thzero 6.0 18.100000 1.9083390218e+00
1919 W_thzero 6.0 18.150000 1.9083395794e+00
1920 W_thzero 6.0 18.200000 1.9083401359e+00
1921 W_thzero 6.0 18.250000 1.9083406911e+00
1922 W_thzero 6.0 18.300000 1.9083412452e+00
1923 W_thzero 6.0 18.350000 1.9083417980e+00
1924 W_thzero 6.0 18.400000 1.9083423497e+00
1925 W_thzero 6.0 18.450000 1.9083429003e+00
1926 W_thzero 6.0 18.500000 1.9083434496e+00
1927 W_thzero 6.0 18.550000 1.9083439978e+00
1928 W_thzero 6.0 18.600000 1.9083445447e+00
1929 W_thzero 6.0 18.650000 1.9083450905e+00
1930 W_thzero 6.0 18.700000 1.9083456351e+00
1931 W_thzero 6.0 18.750000 1.9083461785e+00
1932 W_thzero 6.0 18.800000 1.9083467208e+00
1933 W_thzero 6.0 18.850000 1.9083472618e+00
1934 W_thzero 6.0 18.900000 1.9083478017e+00
1935 W_thzero 6.0 18.950000 1.9083483403e+00
1936 W_thzero 6.0 19.000000 1.9083488778e+00
1937 W_thzero 6.0 19.050000 1.9083494141e+00
1938 W_thzero 6.0 19.100000 1.9083499492e+00
1939 W_thzero 6.0 19.150000 1.9083504831e+00
1940 W_thzero 6.0 19.200000 1.9083510158e+00
1941 W_thzero 6.0 19.250000 1.9083515474e+00
1942 W_thzero 6.0 19.300000 1.9083520777e+00
1943 W_thzero 6.0 19.350000 1.9083526069e+00
1944 W_thzero 6.0 19.400000 1.9083531348e+00
1945 W_thzero 6.0 19.450000 1.9083536616e+00
1946 W_thzero 6.0 19.500000 1.9083541872e+00
1947 W_thzero 6.0 19.550000 1.9083547115e+00
1948 W_thzero 6.0 19.600000 1.9083552347e+00
1949 W_thzero 6.0 19.650000 1.9083557568e+00
1950 W_thzero 6.0 19.700000 1.9083562776e+00
1951 W_thzero 6.0 19.750000 1.9083567972e+00
1952 W_thzero 6.0 19.800000 1.9083573156e+00
1953 W_thzero 6.0 19.850000 1.9083578329e+00
1954 W_thzero 6.0 19.900000 1.9083583489e+00
1955 W_thzero 6.0 19.950000 1.9083588638e+00
1956 W_thzero 6.0 20.000000 1.9083593775e+00
1957 W_thpi 8.0 0.500000 2.7539163883e+00
1958 W_thpi 8.0 0.550000 2.7136409647e+00
1959 W_thpi 8.0 0.600000 2.6837372147e+00
1960 W_thpi 8.0 0.650000 2.6610149301e+00
1961 W_thpi 8.0 0.700000 2.6433887933e+00
1962 W_thpi 8.0 0.750000 2.6294618162e+00
1963 W_thpi 8.0 0.800000 2.6182763598e+00
1964 W_thpi 8.0 0.850000 2.6091616234e+00
1965 W_thpi 8.0 0.900000 2.6016381303e+00
1966 W_thpi 8.0 0.950000 2.5953566473e+00
1967 W_thpi 8.0 1.000000 2.5900583396e+00
1968 W_thpi 8.0 1.050000 2.5855482741e+00
1969 W_thpi 8.0 1.100000 2.5816774728e+00
1970 W_thpi 8.0 1.150000 2.5783305394e+00
1971 W_thpi 8.0 1.200000 2.5754169862e+00
1972 W_thpi 8.0 1.250000 2.5728650567e+00
1973 W_thpi 8.0 1.300000 2.5706172600e+00
1974 W_thpi 8.0 1.350000 2.5686270984e+00
1975 W_thpi 8.0 1.400000 2.5668566378e+00
1976 W_thpi 8.0 1.450000 2.5652746817e+00
1977 W_thpi 8.0 1.500000 2.5638553840e+00
1978 W_thpi 8.0 1.550000 2.5625771841e+00
1979 W_thpi 8.0 1.600000 2.5614219812e+00
1980 W_thpi 8.0 1.650000 2.5603744885e+00
1981 W_thpi 8.0 1.700000 2.5594217241e+00
1982 W_thpi 8.0 1.750000 2.5585526055e+00
1983 W_thpi 8.0 1.800000 2.5577576262e+00
1984 W_thpi 8.0 1.850000 2.5570285935e+00
1985 W_thpi 8.0 1.900000 2.5563584167e+00
1986 W_thpi 8.0 1.950000 2.5557409338e+00
1987 W_thpi 8.0 2.000000 2.5551707691e+00
1988 W_thpi 8.0 2.050000 2.5546432160e+00
1989 W_thpi 8.0 2.100000 2.5541541391e+00
1990 W_thpi 8.0 2.150000 2.5536998932e+00
1991 W_thpi 8.0 2.200000 2.5532772554e+00
1992 W_thpi 8.0 2.250000 2.5528833670e+00
1993 W_thpi 8.0 2.300000 2.5525156860e+00
1994 W_thpi 8.0 2.350000 2.5521719453e+00
1995 W_thpi 8.0 2.400000 2.5518501180e+00
1996 W_thpi 8.0 2.450000 2.5515483877e+00
1997 W_thpi 8.0 2.500000 2.5512651222e+00
1998 W_thpi 8.0 2.550000 2.5509988522e+00
1999 W_thpi 8.0 2.600000 2.5507482516e+00
2000 W_thpi 8.0 2.650000 2.5505121216e+00
2001 W_thpi 8.0 2.700000 2.5502893759e+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())