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 5 of 8 · 500/page · 3519 rows next →
# seriesayrho
2002 W_thpi 8.0 2.750000 2.5500790283e+00
2003 W_thpi 8.0 2.800000 2.5498801819e+00
2004 W_thpi 8.0 2.850000 2.5496920198e+00
2005 W_thpi 8.0 2.900000 2.5495137963e+00
2006 W_thpi 8.0 2.950000 2.5493448297e+00
2007 W_thpi 8.0 3.000000 2.5491844960e+00
2008 W_thpi 8.0 3.050000 2.5490322228e+00
2009 W_thpi 8.0 3.100000 2.5488874846e+00
2010 W_thpi 8.0 3.150000 2.5487497981e+00
2011 W_thpi 8.0 3.200000 2.5486187181e+00
2012 W_thpi 8.0 3.250000 2.5484938342e+00
2013 W_thpi 8.0 3.300000 2.5483747672e+00
2014 W_thpi 8.0 3.350000 2.5482611667e+00
2015 W_thpi 8.0 3.400000 2.5481527085e+00
2016 W_thpi 8.0 3.450000 2.5480490917e+00
2017 W_thpi 8.0 3.500000 2.5479500375e+00
2018 W_thpi 8.0 3.550000 2.5478552868e+00
2019 W_thpi 8.0 3.600000 2.5477645986e+00
2020 W_thpi 8.0 3.650000 2.5476777487e+00
2021 W_thpi 8.0 3.700000 2.5475945281e+00
2022 W_thpi 8.0 3.750000 2.5475147418e+00
2023 W_thpi 8.0 3.800000 2.5474382079e+00
2024 W_thpi 8.0 3.850000 2.5473647563e+00
2025 W_thpi 8.0 3.900000 2.5472942280e+00
2026 W_thpi 8.0 3.950000 2.5472264740e+00
2027 W_thpi 8.0 4.000000 2.5471613548e+00
2028 W_thpi 8.0 4.050000 2.5470987394e+00
2029 W_thpi 8.0 4.100000 2.5470385051e+00
2030 W_thpi 8.0 4.150000 2.5469805366e+00
2031 W_thpi 8.0 4.200000 2.5469247252e+00
2032 W_thpi 8.0 4.250000 2.5468709690e+00
2033 W_thpi 8.0 4.300000 2.5468191719e+00
2034 W_thpi 8.0 4.350000 2.5467692434e+00
2035 W_thpi 8.0 4.400000 2.5467210981e+00
2036 W_thpi 8.0 4.450000 2.5466746555e+00
2037 W_thpi 8.0 4.500000 2.5466298396e+00
2038 W_thpi 8.0 4.550000 2.5465865785e+00
2039 W_thpi 8.0 4.600000 2.5465448042e+00
2040 W_thpi 8.0 4.650000 2.5465044527e+00
2041 W_thpi 8.0 4.700000 2.5464654629e+00
2042 W_thpi 8.0 4.750000 2.5464277774e+00
2043 W_thpi 8.0 4.800000 2.5463913416e+00
2044 W_thpi 8.0 4.850000 2.5463561035e+00
2045 W_thpi 8.0 4.900000 2.5463220142e+00
2046 W_thpi 8.0 4.950000 2.5462890270e+00
2047 W_thpi 8.0 5.000000 2.5462570975e+00
2048 W_thpi 8.0 5.050000 2.5462261837e+00
2049 W_thpi 8.0 5.100000 2.5461962456e+00
2050 W_thpi 8.0 5.150000 2.5461672449e+00
2051 W_thpi 8.0 5.200000 2.5461391456e+00
2052 W_thpi 8.0 5.250000 2.5461119130e+00
2053 W_thpi 8.0 5.300000 2.5460855142e+00
2054 W_thpi 8.0 5.350000 2.5460599178e+00
2055 W_thpi 8.0 5.400000 2.5460350940e+00
2056 W_thpi 8.0 5.450000 2.5460110142e+00
2057 W_thpi 8.0 5.500000 2.5459876511e+00
2058 W_thpi 8.0 5.550000 2.5459649788e+00
2059 W_thpi 8.0 5.600000 2.5459429723e+00
2060 W_thpi 8.0 5.650000 2.5459216078e+00
2061 W_thpi 8.0 5.700000 2.5459008628e+00
2062 W_thpi 8.0 5.750000 2.5458807153e+00
2063 W_thpi 8.0 5.800000 2.5458611446e+00
2064 W_thpi 8.0 5.850000 2.5458421308e+00
2065 W_thpi 8.0 5.900000 2.5458236548e+00
2066 W_thpi 8.0 5.950000 2.5458056984e+00
2067 W_thpi 8.0 6.000000 2.5457882439e+00
2068 W_thpi 8.0 6.050000 2.5457712745e+00
2069 W_thpi 8.0 6.100000 2.5457547743e+00
2070 W_thpi 8.0 6.150000 2.5457387276e+00
2071 W_thpi 8.0 6.200000 2.5457231197e+00
2072 W_thpi 8.0 6.250000 2.5457079363e+00
2073 W_thpi 8.0 6.300000 2.5456931637e+00
2074 W_thpi 8.0 6.350000 2.5456787887e+00
2075 W_thpi 8.0 6.400000 2.5456647987e+00
2076 W_thpi 8.0 6.450000 2.5456511815e+00
2077 W_thpi 8.0 6.500000 2.5456379255e+00
2078 W_thpi 8.0 6.550000 2.5456250194e+00
2079 W_thpi 8.0 6.600000 2.5456124523e+00
2080 W_thpi 8.0 6.650000 2.5456002138e+00
2081 W_thpi 8.0 6.700000 2.5455882939e+00
2082 W_thpi 8.0 6.750000 2.5455766829e+00
2083 W_thpi 8.0 6.800000 2.5455653715e+00
2084 W_thpi 8.0 6.850000 2.5455543508e+00
2085 W_thpi 8.0 6.900000 2.5455436120e+00
2086 W_thpi 8.0 6.950000 2.5455331468e+00
2087 W_thpi 8.0 7.000000 2.5455229471e+00
2088 W_thpi 8.0 7.050000 2.5455130052e+00
2089 W_thpi 8.0 7.100000 2.5455033136e+00
2090 W_thpi 8.0 7.150000 2.5454938651e+00
2091 W_thpi 8.0 7.200000 2.5454846526e+00
2092 W_thpi 8.0 7.250000 2.5454756694e+00
2093 W_thpi 8.0 7.300000 2.5454669090e+00
2094 W_thpi 8.0 7.350000 2.5454583651e+00
2095 W_thpi 8.0 7.400000 2.5454500316e+00
2096 W_thpi 8.0 7.450000 2.5454419025e+00
2097 W_thpi 8.0 7.500000 2.5454339723e+00
2098 W_thpi 8.0 7.550000 2.5454262354e+00
2099 W_thpi 8.0 7.600000 2.5454186864e+00
2100 W_thpi 8.0 7.650000 2.5454113203e+00
2101 W_thpi 8.0 7.700000 2.5454041320e+00
2102 W_thpi 8.0 7.750000 2.5453971167e+00
2103 W_thpi 8.0 7.800000 2.5453902697e+00
2104 W_thpi 8.0 7.850000 2.5453835865e+00
2105 W_thpi 8.0 7.900000 2.5453770628e+00
2106 W_thpi 8.0 7.950000 2.5453706942e+00
2107 W_thpi 8.0 8.000000 2.5453644767e+00
2108 W_thpi 8.0 8.050000 2.5453584062e+00
2109 W_thpi 8.0 8.100000 2.5453524790e+00
2110 W_thpi 8.0 8.150000 2.5453466912e+00
2111 W_thpi 8.0 8.200000 2.5453410392e+00
2112 W_thpi 8.0 8.250000 2.5453355195e+00
2113 W_thpi 8.0 8.300000 2.5453301287e+00
2114 W_thpi 8.0 8.350000 2.5453248634e+00
2115 W_thpi 8.0 8.400000 2.5453197205e+00
2116 W_thpi 8.0 8.450000 2.5453146968e+00
2117 W_thpi 8.0 8.500000 2.5453097893e+00
2118 W_thpi 8.0 8.550000 2.5453049951e+00
2119 W_thpi 8.0 8.600000 2.5453003112e+00
2120 W_thpi 8.0 8.650000 2.5452957350e+00
2121 W_thpi 8.0 8.700000 2.5452912636e+00
2122 W_thpi 8.0 8.750000 2.5452868946e+00
2123 W_thpi 8.0 8.800000 2.5452826253e+00
2124 W_thpi 8.0 8.850000 2.5452784534e+00
2125 W_thpi 8.0 8.900000 2.5452743763e+00
2126 W_thpi 8.0 8.950000 2.5452703917e+00
2127 W_thpi 8.0 9.000000 2.5452664975e+00
2128 W_thpi 8.0 9.050000 2.5452626913e+00
2129 W_thpi 8.0 9.100000 2.5452589711e+00
2130 W_thpi 8.0 9.150000 2.5452553347e+00
2131 W_thpi 8.0 9.200000 2.5452517802e+00
2132 W_thpi 8.0 9.250000 2.5452483055e+00
2133 W_thpi 8.0 9.300000 2.5452449087e+00
2134 W_thpi 8.0 9.350000 2.5452415880e+00
2135 W_thpi 8.0 9.400000 2.5452383416e+00
2136 W_thpi 8.0 9.450000 2.5452351676e+00
2137 W_thpi 8.0 9.500000 2.5452320644e+00
2138 W_thpi 8.0 9.550000 2.5452290303e+00
2139 W_thpi 8.0 9.600000 2.5452260637e+00
2140 W_thpi 8.0 9.650000 2.5452231629e+00
2141 W_thpi 8.0 9.700000 2.5452203265e+00
2142 W_thpi 8.0 9.750000 2.5452175529e+00
2143 W_thpi 8.0 9.800000 2.5452148407e+00
2144 W_thpi 8.0 9.850000 2.5452121884e+00
2145 W_thpi 8.0 9.900000 2.5452095946e+00
2146 W_thpi 8.0 9.950000 2.5452070580e+00
2147 W_thpi 8.0 10.000000 2.5452045774e+00
2148 W_thpi 8.0 10.050000 2.5452021512e+00
2149 W_thpi 8.0 10.100000 2.5451997785e+00
2150 W_thpi 8.0 10.150000 2.5451974578e+00
2151 W_thpi 8.0 10.200000 2.5451951881e+00
2152 W_thpi 8.0 10.250000 2.5451929681e+00
2153 W_thpi 8.0 10.300000 2.5451907968e+00
2154 W_thpi 8.0 10.350000 2.5451886730e+00
2155 W_thpi 8.0 10.400000 2.5451865957e+00
2156 W_thpi 8.0 10.450000 2.5451845638e+00
2157 W_thpi 8.0 10.500000 2.5451825763e+00
2158 W_thpi 8.0 10.550000 2.5451806322e+00
2159 W_thpi 8.0 10.600000 2.5451787305e+00
2160 W_thpi 8.0 10.650000 2.5451768703e+00
2161 W_thpi 8.0 10.700000 2.5451750507e+00
2162 W_thpi 8.0 10.750000 2.5451732707e+00
2163 W_thpi 8.0 10.800000 2.5451715295e+00
2164 W_thpi 8.0 10.850000 2.5451698262e+00
2165 W_thpi 8.0 10.900000 2.5451681600e+00
2166 W_thpi 8.0 10.950000 2.5451665300e+00
2167 W_thpi 8.0 11.000000 2.5451649356e+00
2168 W_thpi 8.0 11.050000 2.5451633758e+00
2169 W_thpi 8.0 11.100000 2.5451618500e+00
2170 W_thpi 8.0 11.150000 2.5451603574e+00
2171 W_thpi 8.0 11.200000 2.5451588972e+00
2172 W_thpi 8.0 11.250000 2.5451574688e+00
2173 W_thpi 8.0 11.300000 2.5451560715e+00
2174 W_thpi 8.0 11.350000 2.5451547046e+00
2175 W_thpi 8.0 11.400000 2.5451533675e+00
2176 W_thpi 8.0 11.450000 2.5451520594e+00
2177 W_thpi 8.0 11.500000 2.5451507799e+00
2178 W_thpi 8.0 11.550000 2.5451495282e+00
2179 W_thpi 8.0 11.600000 2.5451483038e+00
2180 W_thpi 8.0 11.650000 2.5451471061e+00
2181 W_thpi 8.0 11.700000 2.5451459345e+00
2182 W_thpi 8.0 11.750000 2.5451447886e+00
2183 W_thpi 8.0 11.800000 2.5451436676e+00
2184 W_thpi 8.0 11.850000 2.5451425711e+00
2185 W_thpi 8.0 11.900000 2.5451414986e+00
2186 W_thpi 8.0 11.950000 2.5451404496e+00
2187 W_thpi 8.0 12.000000 2.5451394236e+00
2188 W_thpi 8.0 12.050000 2.5451384201e+00
2189 W_thpi 8.0 12.100000 2.5451374386e+00
2190 W_thpi 8.0 12.150000 2.5451364787e+00
2191 W_thpi 8.0 12.200000 2.5451355399e+00
2192 W_thpi 8.0 12.250000 2.5451346217e+00
2193 W_thpi 8.0 12.300000 2.5451337238e+00
2194 W_thpi 8.0 12.350000 2.5451328458e+00
2195 W_thpi 8.0 12.400000 2.5451319871e+00
2196 W_thpi 8.0 12.450000 2.5451311475e+00
2197 W_thpi 8.0 12.500000 2.5451303265e+00
2198 W_thpi 8.0 12.550000 2.5451295238e+00
2199 W_thpi 8.0 12.600000 2.5451287389e+00
2200 W_thpi 8.0 12.650000 2.5451279715e+00
2201 W_thpi 8.0 12.700000 2.5451272213e+00
2202 W_thpi 8.0 12.750000 2.5451264878e+00
2203 W_thpi 8.0 12.800000 2.5451257708e+00
2204 W_thpi 8.0 12.850000 2.5451250699e+00
2205 W_thpi 8.0 12.900000 2.5451243848e+00
2206 W_thpi 8.0 12.950000 2.5451237152e+00
2207 W_thpi 8.0 13.000000 2.5451230607e+00
2208 W_thpi 8.0 13.050000 2.5451224211e+00
2209 W_thpi 8.0 13.100000 2.5451217960e+00
2210 W_thpi 8.0 13.150000 2.5451211852e+00
2211 W_thpi 8.0 13.200000 2.5451205884e+00
2212 W_thpi 8.0 13.250000 2.5451200052e+00
2213 W_thpi 8.0 13.300000 2.5451194355e+00
2214 W_thpi 8.0 13.350000 2.5451188790e+00
2215 W_thpi 8.0 13.400000 2.5451183353e+00
2216 W_thpi 8.0 13.450000 2.5451178043e+00
2217 W_thpi 8.0 13.500000 2.5451172856e+00
2218 W_thpi 8.0 13.550000 2.5451167791e+00
2219 W_thpi 8.0 13.600000 2.5451162845e+00
2220 W_thpi 8.0 13.650000 2.5451158016e+00
2221 W_thpi 8.0 13.700000 2.5451153301e+00
2222 W_thpi 8.0 13.750000 2.5451148698e+00
2223 W_thpi 8.0 13.800000 2.5451144205e+00
2224 W_thpi 8.0 13.850000 2.5451139820e+00
2225 W_thpi 8.0 13.900000 2.5451135541e+00
2226 W_thpi 8.0 13.950000 2.5451131365e+00
2227 W_thpi 8.0 14.000000 2.5451127292e+00
2228 W_thpi 8.0 14.050000 2.5451123317e+00
2229 W_thpi 8.0 14.100000 2.5451119441e+00
2230 W_thpi 8.0 14.150000 2.5451115660e+00
2231 W_thpi 8.0 14.200000 2.5451111974e+00
2232 W_thpi 8.0 14.250000 2.5451108379e+00
2233 W_thpi 8.0 14.300000 2.5451104876e+00
2234 W_thpi 8.0 14.350000 2.5451101461e+00
2235 W_thpi 8.0 14.400000 2.5451098133e+00
2236 W_thpi 8.0 14.450000 2.5451094890e+00
2237 W_thpi 8.0 14.500000 2.5451091731e+00
2238 W_thpi 8.0 14.550000 2.5451088655e+00
2239 W_thpi 8.0 14.600000 2.5451085659e+00
2240 W_thpi 8.0 14.650000 2.5451082742e+00
2241 W_thpi 8.0 14.700000 2.5451079903e+00
2242 W_thpi 8.0 14.750000 2.5451077140e+00
2243 W_thpi 8.0 14.800000 2.5451074452e+00
2244 W_thpi 8.0 14.850000 2.5451071837e+00
2245 W_thpi 8.0 14.900000 2.5451069294e+00
2246 W_thpi 8.0 14.950000 2.5451066822e+00
2247 W_thpi 8.0 15.000000 2.5451064419e+00
2248 W_thpi 8.0 15.050000 2.5451062085e+00
2249 W_thpi 8.0 15.100000 2.5451059817e+00
2250 W_thpi 8.0 15.150000 2.5451057615e+00
2251 W_thpi 8.0 15.200000 2.5451055477e+00
2252 W_thpi 8.0 15.250000 2.5451053402e+00
2253 W_thpi 8.0 15.300000 2.5451051390e+00
2254 W_thpi 8.0 15.350000 2.5451049438e+00
2255 W_thpi 8.0 15.400000 2.5451047546e+00
2256 W_thpi 8.0 15.450000 2.5451045713e+00
2257 W_thpi 8.0 15.500000 2.5451043938e+00
2258 W_thpi 8.0 15.550000 2.5451042219e+00
2259 W_thpi 8.0 15.600000 2.5451040556e+00
2260 W_thpi 8.0 15.650000 2.5451038947e+00
2261 W_thpi 8.0 15.700000 2.5451037393e+00
2262 W_thpi 8.0 15.750000 2.5451035890e+00
2263 W_thpi 8.0 15.800000 2.5451034440e+00
2264 W_thpi 8.0 15.850000 2.5451033041e+00
2265 W_thpi 8.0 15.900000 2.5451031691e+00
2266 W_thpi 8.0 15.950000 2.5451030390e+00
2267 W_thpi 8.0 16.000000 2.5451029138e+00
2268 W_thpi 8.0 16.050000 2.5451027933e+00
2269 W_thpi 8.0 16.100000 2.5451026774e+00
2270 W_thpi 8.0 16.150000 2.5451025661e+00
2271 W_thpi 8.0 16.200000 2.5451024594e+00
2272 W_thpi 8.0 16.250000 2.5451023570e+00
2273 W_thpi 8.0 16.300000 2.5451022589e+00
2274 W_thpi 8.0 16.350000 2.5451021651e+00
2275 W_thpi 8.0 16.400000 2.5451020755e+00
2276 W_thpi 8.0 16.450000 2.5451019900e+00
2277 W_thpi 8.0 16.500000 2.5451019086e+00
2278 W_thpi 8.0 16.550000 2.5451018311e+00
2279 W_thpi 8.0 16.600000 2.5451017576e+00
2280 W_thpi 8.0 16.650000 2.5451016878e+00
2281 W_thpi 8.0 16.700000 2.5451016219e+00
2282 W_thpi 8.0 16.750000 2.5451015597e+00
2283 W_thpi 8.0 16.800000 2.5451015011e+00
2284 W_thpi 8.0 16.850000 2.5451014461e+00
2285 W_thpi 8.0 16.900000 2.5451013946e+00
2286 W_thpi 8.0 16.950000 2.5451013466e+00
2287 W_thpi 8.0 17.000000 2.5451013020e+00
2288 W_thpi 8.0 17.050000 2.5451012608e+00
2289 W_thpi 8.0 17.100000 2.5451012228e+00
2290 W_thpi 8.0 17.150000 2.5451011881e+00
2291 W_thpi 8.0 17.200000 2.5451011566e+00
2292 W_thpi 8.0 17.250000 2.5451011282e+00
2293 W_thpi 8.0 17.300000 2.5451011029e+00
2294 W_thpi 8.0 17.350000 2.5451010807e+00
2295 W_thpi 8.0 17.400000 2.5451010614e+00
2296 W_thpi 8.0 17.450000 2.5451010451e+00
2297 W_thpi 8.0 17.500000 2.5451010316e+00
2298 W_thpi 8.0 17.550000 2.5451010210e+00
2299 W_thpi 8.0 17.600000 2.5451010132e+00
2300 W_thpi 8.0 17.650000 2.5451010082e+00
2301 W_thpi 8.0 17.700000 2.5451010058e+00
2302 W_thpi 8.0 17.750000 2.5451010061e+00
2303 W_thpi 8.0 17.800000 2.5451010091e+00
2304 W_thpi 8.0 17.850000 2.5451010146e+00
2305 W_thpi 8.0 17.900000 2.5451010226e+00
2306 W_thpi 8.0 17.950000 2.5451010332e+00
2307 W_thpi 8.0 18.000000 2.5451010462e+00
2308 W_thpi 8.0 18.050000 2.5451010616e+00
2309 W_thpi 8.0 18.100000 2.5451010794e+00
2310 W_thpi 8.0 18.150000 2.5451010996e+00
2311 W_thpi 8.0 18.200000 2.5451011220e+00
2312 W_thpi 8.0 18.250000 2.5451011468e+00
2313 W_thpi 8.0 18.300000 2.5451011737e+00
2314 W_thpi 8.0 18.350000 2.5451012029e+00
2315 W_thpi 8.0 18.400000 2.5451012343e+00
2316 W_thpi 8.0 18.450000 2.5451012677e+00
2317 W_thpi 8.0 18.500000 2.5451013033e+00
2318 W_thpi 8.0 18.550000 2.5451013410e+00
2319 W_thpi 8.0 18.600000 2.5451013806e+00
2320 W_thpi 8.0 18.650000 2.5451014223e+00
2321 W_thpi 8.0 18.700000 2.5451014660e+00
2322 W_thpi 8.0 18.750000 2.5451015116e+00
2323 W_thpi 8.0 18.800000 2.5451015591e+00
2324 W_thpi 8.0 18.850000 2.5451016086e+00
2325 W_thpi 8.0 18.900000 2.5451016598e+00
2326 W_thpi 8.0 18.950000 2.5451017130e+00
2327 W_thpi 8.0 19.000000 2.5451017679e+00
2328 W_thpi 8.0 19.050000 2.5451018246e+00
2329 W_thpi 8.0 19.100000 2.5451018830e+00
2330 W_thpi 8.0 19.150000 2.5451019432e+00
2331 W_thpi 8.0 19.200000 2.5451020051e+00
2332 W_thpi 8.0 19.250000 2.5451020686e+00
2333 W_thpi 8.0 19.300000 2.5451021338e+00
2334 W_thpi 8.0 19.350000 2.5451022006e+00
2335 W_thpi 8.0 19.400000 2.5451022690e+00
2336 W_thpi 8.0 19.450000 2.5451023390e+00
2337 W_thpi 8.0 19.500000 2.5451024106e+00
2338 W_thpi 8.0 19.550000 2.5451024837e+00
2339 W_thpi 8.0 19.600000 2.5451025583e+00
2340 W_thpi 8.0 19.650000 2.5451026344e+00
2341 W_thpi 8.0 19.700000 2.5451027119e+00
2342 W_thpi 8.0 19.750000 2.5451027909e+00
2343 W_thpi 8.0 19.800000 2.5451028714e+00
2344 W_thpi 8.0 19.850000 2.5451029532e+00
2345 W_thpi 8.0 19.900000 2.5451030364e+00
2346 W_thpi 8.0 19.950000 2.5451031210e+00
2347 W_thpi 8.0 20.000000 2.5451032069e+00
2348 W_thzero 8.0 0.500000 2.5464211412e+00
2349 W_thzero 8.0 0.550000 2.5454762027e+00
2350 W_thzero 8.0 0.600000 2.5450517922e+00
2351 W_thzero 8.0 0.650000 2.5448613154e+00
2352 W_thzero 8.0 0.700000 2.5447759980e+00
2353 W_thzero 8.0 0.750000 2.5447379602e+00
2354 W_thzero 8.0 0.800000 2.5447211833e+00
2355 W_thzero 8.0 0.850000 2.5447139705e+00
2356 W_thzero 8.0 0.900000 2.5447110631e+00
2357 W_thzero 8.0 0.950000 2.5447100968e+00
2358 W_thzero 8.0 1.000000 2.5447100088e+00
2359 W_thzero 8.0 1.050000 2.5447103212e+00
2360 W_thzero 8.0 1.100000 2.5447108191e+00
2361 W_thzero 8.0 1.150000 2.5447114059e+00
2362 W_thzero 8.0 1.200000 2.5447120379e+00
2363 W_thzero 8.0 1.250000 2.5447126958e+00
2364 W_thzero 8.0 1.300000 2.5447133705e+00
2365 W_thzero 8.0 1.350000 2.5447140582e+00
2366 W_thzero 8.0 1.400000 2.5447147570e+00
2367 W_thzero 8.0 1.450000 2.5447154659e+00
2368 W_thzero 8.0 1.500000 2.5447161846e+00
2369 W_thzero 8.0 1.550000 2.5447169129e+00
2370 W_thzero 8.0 1.600000 2.5447176505e+00
2371 W_thzero 8.0 1.650000 2.5447183975e+00
2372 W_thzero 8.0 1.700000 2.5447191537e+00
2373 W_thzero 8.0 1.750000 2.5447199189e+00
2374 W_thzero 8.0 1.800000 2.5447206933e+00
2375 W_thzero 8.0 1.850000 2.5447214765e+00
2376 W_thzero 8.0 1.900000 2.5447222687e+00
2377 W_thzero 8.0 1.950000 2.5447230697e+00
2378 W_thzero 8.0 2.000000 2.5447238793e+00
2379 W_thzero 8.0 2.050000 2.5447246977e+00
2380 W_thzero 8.0 2.100000 2.5447255246e+00
2381 W_thzero 8.0 2.150000 2.5447263600e+00
2382 W_thzero 8.0 2.200000 2.5447272037e+00
2383 W_thzero 8.0 2.250000 2.5447280558e+00
2384 W_thzero 8.0 2.300000 2.5447289162e+00
2385 W_thzero 8.0 2.350000 2.5447297847e+00
2386 W_thzero 8.0 2.400000 2.5447306612e+00
2387 W_thzero 8.0 2.450000 2.5447315458e+00
2388 W_thzero 8.0 2.500000 2.5447324383e+00
2389 W_thzero 8.0 2.550000 2.5447333386e+00
2390 W_thzero 8.0 2.600000 2.5447342466e+00
2391 W_thzero 8.0 2.650000 2.5447351624e+00
2392 W_thzero 8.0 2.700000 2.5447360857e+00
2393 W_thzero 8.0 2.750000 2.5447370165e+00
2394 W_thzero 8.0 2.800000 2.5447379547e+00
2395 W_thzero 8.0 2.850000 2.5447389002e+00
2396 W_thzero 8.0 2.900000 2.5447398531e+00
2397 W_thzero 8.0 2.950000 2.5447408130e+00
2398 W_thzero 8.0 3.000000 2.5447417801e+00
2399 W_thzero 8.0 3.050000 2.5447427542e+00
2400 W_thzero 8.0 3.100000 2.5447437352e+00
2401 W_thzero 8.0 3.150000 2.5447447231e+00
2402 W_thzero 8.0 3.200000 2.5447457178e+00
2403 W_thzero 8.0 3.250000 2.5447467191e+00
2404 W_thzero 8.0 3.300000 2.5447477270e+00
2405 W_thzero 8.0 3.350000 2.5447487415e+00
2406 W_thzero 8.0 3.400000 2.5447497624e+00
2407 W_thzero 8.0 3.450000 2.5447507897e+00
2408 W_thzero 8.0 3.500000 2.5447518232e+00
2409 W_thzero 8.0 3.550000 2.5447528630e+00
2410 W_thzero 8.0 3.600000 2.5447539089e+00
2411 W_thzero 8.0 3.650000 2.5447549608e+00
2412 W_thzero 8.0 3.700000 2.5447560188e+00
2413 W_thzero 8.0 3.750000 2.5447570826e+00
2414 W_thzero 8.0 3.800000 2.5447581522e+00
2415 W_thzero 8.0 3.850000 2.5447592275e+00
2416 W_thzero 8.0 3.900000 2.5447603085e+00
2417 W_thzero 8.0 3.950000 2.5447613951e+00
2418 W_thzero 8.0 4.000000 2.5447624872e+00
2419 W_thzero 8.0 4.050000 2.5447635847e+00
2420 W_thzero 8.0 4.100000 2.5447646875e+00
2421 W_thzero 8.0 4.150000 2.5447657957e+00
2422 W_thzero 8.0 4.200000 2.5447669090e+00
2423 W_thzero 8.0 4.250000 2.5447680274e+00
2424 W_thzero 8.0 4.300000 2.5447691509e+00
2425 W_thzero 8.0 4.350000 2.5447702793e+00
2426 W_thzero 8.0 4.400000 2.5447714126e+00
2427 W_thzero 8.0 4.450000 2.5447725507e+00
2428 W_thzero 8.0 4.500000 2.5447736936e+00
2429 W_thzero 8.0 4.550000 2.5447748411e+00
2430 W_thzero 8.0 4.600000 2.5447759932e+00
2431 W_thzero 8.0 4.650000 2.5447771499e+00
2432 W_thzero 8.0 4.700000 2.5447783110e+00
2433 W_thzero 8.0 4.750000 2.5447794764e+00
2434 W_thzero 8.0 4.800000 2.5447806461e+00
2435 W_thzero 8.0 4.850000 2.5447818201e+00
2436 W_thzero 8.0 4.900000 2.5447829982e+00
2437 W_thzero 8.0 4.950000 2.5447841804e+00
2438 W_thzero 8.0 5.000000 2.5447853666e+00
2439 W_thzero 8.0 5.050000 2.5447865568e+00
2440 W_thzero 8.0 5.100000 2.5447877508e+00
2441 W_thzero 8.0 5.150000 2.5447889486e+00
2442 W_thzero 8.0 5.200000 2.5447901501e+00
2443 W_thzero 8.0 5.250000 2.5447913553e+00
2444 W_thzero 8.0 5.300000 2.5447925640e+00
2445 W_thzero 8.0 5.350000 2.5447937763e+00
2446 W_thzero 8.0 5.400000 2.5447949920e+00
2447 W_thzero 8.0 5.450000 2.5447962111e+00
2448 W_thzero 8.0 5.500000 2.5447974336e+00
2449 W_thzero 8.0 5.550000 2.5447986592e+00
2450 W_thzero 8.0 5.600000 2.5447998881e+00
2451 W_thzero 8.0 5.650000 2.5448011200e+00
2452 W_thzero 8.0 5.700000 2.5448023550e+00
2453 W_thzero 8.0 5.750000 2.5448035929e+00
2454 W_thzero 8.0 5.800000 2.5448048338e+00
2455 W_thzero 8.0 5.850000 2.5448060775e+00
2456 W_thzero 8.0 5.900000 2.5448073240e+00
2457 W_thzero 8.0 5.950000 2.5448085733e+00
2458 W_thzero 8.0 6.000000 2.5448098251e+00
2459 W_thzero 8.0 6.050000 2.5448110796e+00
2460 W_thzero 8.0 6.100000 2.5448123365e+00
2461 W_thzero 8.0 6.150000 2.5448135960e+00
2462 W_thzero 8.0 6.200000 2.5448148578e+00
2463 W_thzero 8.0 6.250000 2.5448161220e+00
2464 W_thzero 8.0 6.300000 2.5448173884e+00
2465 W_thzero 8.0 6.350000 2.5448186571e+00
2466 W_thzero 8.0 6.400000 2.5448199279e+00
2467 W_thzero 8.0 6.450000 2.5448212008e+00
2468 W_thzero 8.0 6.500000 2.5448224757e+00
2469 W_thzero 8.0 6.550000 2.5448237526e+00
2470 W_thzero 8.0 6.600000 2.5448250314e+00
2471 W_thzero 8.0 6.650000 2.5448263121e+00
2472 W_thzero 8.0 6.700000 2.5448275945e+00
2473 W_thzero 8.0 6.750000 2.5448288787e+00
2474 W_thzero 8.0 6.800000 2.5448301645e+00
2475 W_thzero 8.0 6.850000 2.5448314520e+00
2476 W_thzero 8.0 6.900000 2.5448327410e+00
2477 W_thzero 8.0 6.950000 2.5448340316e+00
2478 W_thzero 8.0 7.000000 2.5448353236e+00
2479 W_thzero 8.0 7.050000 2.5448366169e+00
2480 W_thzero 8.0 7.100000 2.5448379117e+00
2481 W_thzero 8.0 7.150000 2.5448392076e+00
2482 W_thzero 8.0 7.200000 2.5448405049e+00
2483 W_thzero 8.0 7.250000 2.5448418032e+00
2484 W_thzero 8.0 7.300000 2.5448431027e+00
2485 W_thzero 8.0 7.350000 2.5448444033e+00
2486 W_thzero 8.0 7.400000 2.5448457049e+00
2487 W_thzero 8.0 7.450000 2.5448470074e+00
2488 W_thzero 8.0 7.500000 2.5448483108e+00
2489 W_thzero 8.0 7.550000 2.5448496151e+00
2490 W_thzero 8.0 7.600000 2.5448509202e+00
2491 W_thzero 8.0 7.650000 2.5448522260e+00
2492 W_thzero 8.0 7.700000 2.5448535326e+00
2493 W_thzero 8.0 7.750000 2.5448548397e+00
2494 W_thzero 8.0 7.800000 2.5448561475e+00
2495 W_thzero 8.0 7.850000 2.5448574558e+00
2496 W_thzero 8.0 7.900000 2.5448587646e+00
2497 W_thzero 8.0 7.950000 2.5448600739e+00
2498 W_thzero 8.0 8.000000 2.5448613836e+00
2499 W_thzero 8.0 8.050000 2.5448626936e+00
2500 W_thzero 8.0 8.100000 2.5448640039e+00
2501 W_thzero 8.0 8.150000 2.5448653144e+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())