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 7 of 8 · 500/page · 3519 rows next →
# seriesayrho
3002 W_thpi 10.0 13.650000 3.1817740388e+00
3003 W_thpi 10.0 13.700000 3.1817739933e+00
3004 W_thpi 10.0 13.750000 3.1817739560e+00
3005 W_thpi 10.0 13.800000 3.1817739270e+00
3006 W_thpi 10.0 13.850000 3.1817739059e+00
3007 W_thpi 10.0 13.900000 3.1817738926e+00
3008 W_thpi 10.0 13.950000 3.1817738869e+00
3009 W_thpi 10.0 14.000000 3.1817738887e+00
3010 W_thpi 10.0 14.050000 3.1817738977e+00
3011 W_thpi 10.0 14.100000 3.1817739139e+00
3012 W_thpi 10.0 14.150000 3.1817739371e+00
3013 W_thpi 10.0 14.200000 3.1817739670e+00
3014 W_thpi 10.0 14.250000 3.1817740036e+00
3015 W_thpi 10.0 14.300000 3.1817740467e+00
3016 W_thpi 10.0 14.350000 3.1817740962e+00
3017 W_thpi 10.0 14.400000 3.1817741518e+00
3018 W_thpi 10.0 14.450000 3.1817742136e+00
3019 W_thpi 10.0 14.500000 3.1817742813e+00
3020 W_thpi 10.0 14.550000 3.1817743548e+00
3021 W_thpi 10.0 14.600000 3.1817744339e+00
3022 W_thpi 10.0 14.650000 3.1817745186e+00
3023 W_thpi 10.0 14.700000 3.1817746088e+00
3024 W_thpi 10.0 14.750000 3.1817747042e+00
3025 W_thpi 10.0 14.800000 3.1817748048e+00
3026 W_thpi 10.0 14.850000 3.1817749104e+00
3027 W_thpi 10.0 14.900000 3.1817750210e+00
3028 W_thpi 10.0 14.950000 3.1817751364e+00
3029 W_thpi 10.0 15.000000 3.1817752565e+00
3030 W_thpi 10.0 15.050000 3.1817753812e+00
3031 W_thpi 10.0 15.100000 3.1817755104e+00
3032 W_thpi 10.0 15.150000 3.1817756440e+00
3033 W_thpi 10.0 15.200000 3.1817757819e+00
3034 W_thpi 10.0 15.250000 3.1817759240e+00
3035 W_thpi 10.0 15.300000 3.1817760701e+00
3036 W_thpi 10.0 15.350000 3.1817762203e+00
3037 W_thpi 10.0 15.400000 3.1817763744e+00
3038 W_thpi 10.0 15.450000 3.1817765322e+00
3039 W_thpi 10.0 15.500000 3.1817766938e+00
3040 W_thpi 10.0 15.550000 3.1817768591e+00
3041 W_thpi 10.0 15.600000 3.1817770279e+00
3042 W_thpi 10.0 15.650000 3.1817772001e+00
3043 W_thpi 10.0 15.700000 3.1817773757e+00
3044 W_thpi 10.0 15.750000 3.1817775546e+00
3045 W_thpi 10.0 15.800000 3.1817777367e+00
3046 W_thpi 10.0 15.850000 3.1817779220e+00
3047 W_thpi 10.0 15.900000 3.1817781103e+00
3048 W_thpi 10.0 15.950000 3.1817783016e+00
3049 W_thpi 10.0 16.000000 3.1817784958e+00
3050 W_thpi 10.0 16.050000 3.1817786929e+00
3051 W_thpi 10.0 16.100000 3.1817788927e+00
3052 W_thpi 10.0 16.150000 3.1817790953e+00
3053 W_thpi 10.0 16.200000 3.1817793004e+00
3054 W_thpi 10.0 16.250000 3.1817795082e+00
3055 W_thpi 10.0 16.300000 3.1817797184e+00
3056 W_thpi 10.0 16.350000 3.1817799311e+00
3057 W_thpi 10.0 16.400000 3.1817801462e+00
3058 W_thpi 10.0 16.450000 3.1817803635e+00
3059 W_thpi 10.0 16.500000 3.1817805832e+00
3060 W_thpi 10.0 16.550000 3.1817808050e+00
3061 W_thpi 10.0 16.600000 3.1817810290e+00
3062 W_thpi 10.0 16.650000 3.1817812551e+00
3063 W_thpi 10.0 16.700000 3.1817814832e+00
3064 W_thpi 10.0 16.750000 3.1817817133e+00
3065 W_thpi 10.0 16.800000 3.1817819453e+00
3066 W_thpi 10.0 16.850000 3.1817821791e+00
3067 W_thpi 10.0 16.900000 3.1817824148e+00
3068 W_thpi 10.0 16.950000 3.1817826523e+00
3069 W_thpi 10.0 17.000000 3.1817828915e+00
3070 W_thpi 10.0 17.050000 3.1817831324e+00
3071 W_thpi 10.0 17.100000 3.1817833749e+00
3072 W_thpi 10.0 17.150000 3.1817836190e+00
3073 W_thpi 10.0 17.200000 3.1817838646e+00
3074 W_thpi 10.0 17.250000 3.1817841118e+00
3075 W_thpi 10.0 17.300000 3.1817843603e+00
3076 W_thpi 10.0 17.350000 3.1817846103e+00
3077 W_thpi 10.0 17.400000 3.1817848617e+00
3078 W_thpi 10.0 17.450000 3.1817851144e+00
3079 W_thpi 10.0 17.500000 3.1817853684e+00
3080 W_thpi 10.0 17.550000 3.1817856236e+00
3081 W_thpi 10.0 17.600000 3.1817858801e+00
3082 W_thpi 10.0 17.650000 3.1817861377e+00
3083 W_thpi 10.0 17.700000 3.1817863965e+00
3084 W_thpi 10.0 17.750000 3.1817866564e+00
3085 W_thpi 10.0 17.800000 3.1817869173e+00
3086 W_thpi 10.0 17.850000 3.1817871793e+00
3087 W_thpi 10.0 17.900000 3.1817874423e+00
3088 W_thpi 10.0 17.950000 3.1817877063e+00
3089 W_thpi 10.0 18.000000 3.1817879712e+00
3090 W_thpi 10.0 18.050000 3.1817882370e+00
3091 W_thpi 10.0 18.100000 3.1817885037e+00
3092 W_thpi 10.0 18.150000 3.1817887712e+00
3093 W_thpi 10.0 18.200000 3.1817890395e+00
3094 W_thpi 10.0 18.250000 3.1817893086e+00
3095 W_thpi 10.0 18.300000 3.1817895785e+00
3096 W_thpi 10.0 18.350000 3.1817898491e+00
3097 W_thpi 10.0 18.400000 3.1817901204e+00
3098 W_thpi 10.0 18.450000 3.1817903924e+00
3099 W_thpi 10.0 18.500000 3.1817906651e+00
3100 W_thpi 10.0 18.550000 3.1817909383e+00
3101 W_thpi 10.0 18.600000 3.1817912122e+00
3102 W_thpi 10.0 18.650000 3.1817914866e+00
3103 W_thpi 10.0 18.700000 3.1817917616e+00
3104 W_thpi 10.0 18.750000 3.1817920371e+00
3105 W_thpi 10.0 18.800000 3.1817923132e+00
3106 W_thpi 10.0 18.850000 3.1817925897e+00
3107 W_thpi 10.0 18.900000 3.1817928666e+00
3108 W_thpi 10.0 18.950000 3.1817931440e+00
3109 W_thpi 10.0 19.000000 3.1817934218e+00
3110 W_thpi 10.0 19.050000 3.1817937000e+00
3111 W_thpi 10.0 19.100000 3.1817939786e+00
3112 W_thpi 10.0 19.150000 3.1817942575e+00
3113 W_thpi 10.0 19.200000 3.1817945368e+00
3114 W_thpi 10.0 19.250000 3.1817948164e+00
3115 W_thpi 10.0 19.300000 3.1817950962e+00
3116 W_thpi 10.0 19.350000 3.1817953764e+00
3117 W_thpi 10.0 19.400000 3.1817956568e+00
3118 W_thpi 10.0 19.450000 3.1817959374e+00
3119 W_thpi 10.0 19.500000 3.1817962183e+00
3120 W_thpi 10.0 19.550000 3.1817964994e+00
3121 W_thpi 10.0 19.600000 3.1817967807e+00
3122 W_thpi 10.0 19.650000 3.1817970621e+00
3123 W_thpi 10.0 19.700000 3.1817973437e+00
3124 W_thpi 10.0 19.750000 3.1817976255e+00
3125 W_thpi 10.0 19.800000 3.1817979074e+00
3126 W_thpi 10.0 19.850000 3.1817981894e+00
3127 W_thpi 10.0 19.900000 3.1817984715e+00
3128 W_thpi 10.0 19.950000 3.1817987536e+00
3129 W_thpi 10.0 20.000000 3.1817990359e+00
3130 W_thzero 10.0 0.500000 3.1818202778e+00
3131 W_thzero 10.0 0.550000 3.1816374677e+00
3132 W_thzero 10.0 0.600000 3.1815706080e+00
3133 W_thzero 10.0 0.650000 3.1815464256e+00
3134 W_thzero 10.0 0.700000 3.1815379533e+00
3135 W_thzero 10.0 0.750000 3.1815352659e+00
3136 W_thzero 10.0 0.800000 3.1815347103e+00
3137 W_thzero 10.0 0.850000 3.1815349418e+00
3138 W_thzero 10.0 0.900000 3.1815354656e+00
3139 W_thzero 10.0 0.950000 3.1815360995e+00
3140 W_thzero 10.0 1.000000 3.1815367764e+00
3141 W_thzero 10.0 1.050000 3.1815374715e+00
3142 W_thzero 10.0 1.100000 3.1815381757e+00
3143 W_thzero 10.0 1.150000 3.1815388857e+00
3144 W_thzero 10.0 1.200000 3.1815396001e+00
3145 W_thzero 10.0 1.250000 3.1815403184e+00
3146 W_thzero 10.0 1.300000 3.1815410404e+00
3147 W_thzero 10.0 1.350000 3.1815417660e+00
3148 W_thzero 10.0 1.400000 3.1815424952e+00
3149 W_thzero 10.0 1.450000 3.1815432278e+00
3150 W_thzero 10.0 1.500000 3.1815439637e+00
3151 W_thzero 10.0 1.550000 3.1815447031e+00
3152 W_thzero 10.0 1.600000 3.1815454457e+00
3153 W_thzero 10.0 1.650000 3.1815461915e+00
3154 W_thzero 10.0 1.700000 3.1815469405e+00
3155 W_thzero 10.0 1.750000 3.1815476925e+00
3156 W_thzero 10.0 1.800000 3.1815484477e+00
3157 W_thzero 10.0 1.850000 3.1815492058e+00
3158 W_thzero 10.0 1.900000 3.1815499669e+00
3159 W_thzero 10.0 1.950000 3.1815507308e+00
3160 W_thzero 10.0 2.000000 3.1815514976e+00
3161 W_thzero 10.0 2.050000 3.1815522672e+00
3162 W_thzero 10.0 2.100000 3.1815530394e+00
3163 W_thzero 10.0 2.150000 3.1815538143e+00
3164 W_thzero 10.0 2.200000 3.1815545918e+00
3165 W_thzero 10.0 2.250000 3.1815553719e+00
3166 W_thzero 10.0 2.300000 3.1815561544e+00
3167 W_thzero 10.0 2.350000 3.1815569394e+00
3168 W_thzero 10.0 2.400000 3.1815577267e+00
3169 W_thzero 10.0 2.450000 3.1815585164e+00
3170 W_thzero 10.0 2.500000 3.1815593083e+00
3171 W_thzero 10.0 2.550000 3.1815601024e+00
3172 W_thzero 10.0 2.600000 3.1815608987e+00
3173 W_thzero 10.0 2.650000 3.1815616971e+00
3174 W_thzero 10.0 2.700000 3.1815624975e+00
3175 W_thzero 10.0 2.750000 3.1815632999e+00
3176 W_thzero 10.0 2.800000 3.1815641042e+00
3177 W_thzero 10.0 2.850000 3.1815649105e+00
3178 W_thzero 10.0 2.900000 3.1815657185e+00
3179 W_thzero 10.0 2.950000 3.1815665283e+00
3180 W_thzero 10.0 3.000000 3.1815673399e+00
3181 W_thzero 10.0 3.050000 3.1815681531e+00
3182 W_thzero 10.0 3.100000 3.1815689679e+00
3183 W_thzero 10.0 3.150000 3.1815697843e+00
3184 W_thzero 10.0 3.200000 3.1815706022e+00
3185 W_thzero 10.0 3.250000 3.1815714216e+00
3186 W_thzero 10.0 3.300000 3.1815722424e+00
3187 W_thzero 10.0 3.350000 3.1815730645e+00
3188 W_thzero 10.0 3.400000 3.1815738880e+00
3189 W_thzero 10.0 3.450000 3.1815747127e+00
3190 W_thzero 10.0 3.500000 3.1815755387e+00
3191 W_thzero 10.0 3.550000 3.1815763658e+00
3192 W_thzero 10.0 3.600000 3.1815771940e+00
3193 W_thzero 10.0 3.650000 3.1815780233e+00
3194 W_thzero 10.0 3.700000 3.1815788536e+00
3195 W_thzero 10.0 3.750000 3.1815796849e+00
3196 W_thzero 10.0 3.800000 3.1815805171e+00
3197 W_thzero 10.0 3.850000 3.1815813502e+00
3198 W_thzero 10.0 3.900000 3.1815821841e+00
3199 W_thzero 10.0 3.950000 3.1815830188e+00
3200 W_thzero 10.0 4.000000 3.1815838543e+00
3201 W_thzero 10.0 4.050000 3.1815846905e+00
3202 W_thzero 10.0 4.100000 3.1815855273e+00
3203 W_thzero 10.0 4.150000 3.1815863648e+00
3204 W_thzero 10.0 4.200000 3.1815872028e+00
3205 W_thzero 10.0 4.250000 3.1815880413e+00
3206 W_thzero 10.0 4.300000 3.1815888803e+00
3207 W_thzero 10.0 4.350000 3.1815897198e+00
3208 W_thzero 10.0 4.400000 3.1815905597e+00
3209 W_thzero 10.0 4.450000 3.1815913999e+00
3210 W_thzero 10.0 4.500000 3.1815922405e+00
3211 W_thzero 10.0 4.550000 3.1815930813e+00
3212 W_thzero 10.0 4.600000 3.1815939224e+00
3213 W_thzero 10.0 4.650000 3.1815947637e+00
3214 W_thzero 10.0 4.700000 3.1815956051e+00
3215 W_thzero 10.0 4.750000 3.1815964467e+00
3216 W_thzero 10.0 4.800000 3.1815972884e+00
3217 W_thzero 10.0 4.850000 3.1815981301e+00
3218 W_thzero 10.0 4.900000 3.1815989718e+00
3219 W_thzero 10.0 4.950000 3.1815998135e+00
3220 W_thzero 10.0 5.000000 3.1816006552e+00
3221 W_thzero 10.0 5.050000 3.1816014968e+00
3222 W_thzero 10.0 5.100000 3.1816023382e+00
3223 W_thzero 10.0 5.150000 3.1816031795e+00
3224 W_thzero 10.0 5.200000 3.1816040206e+00
3225 W_thzero 10.0 5.250000 3.1816048615e+00
3226 W_thzero 10.0 5.300000 3.1816057021e+00
3227 W_thzero 10.0 5.350000 3.1816065424e+00
3228 W_thzero 10.0 5.400000 3.1816073824e+00
3229 W_thzero 10.0 5.450000 3.1816082220e+00
3230 W_thzero 10.0 5.500000 3.1816090613e+00
3231 W_thzero 10.0 5.550000 3.1816099001e+00
3232 W_thzero 10.0 5.600000 3.1816107385e+00
3233 W_thzero 10.0 5.650000 3.1816115764e+00
3234 W_thzero 10.0 5.700000 3.1816124138e+00
3235 W_thzero 10.0 5.750000 3.1816132507e+00
3236 W_thzero 10.0 5.800000 3.1816140870e+00
3237 W_thzero 10.0 5.850000 3.1816149227e+00
3238 W_thzero 10.0 5.900000 3.1816157578e+00
3239 W_thzero 10.0 5.950000 3.1816165923e+00
3240 W_thzero 10.0 6.000000 3.1816174260e+00
3241 W_thzero 10.0 6.050000 3.1816182591e+00
3242 W_thzero 10.0 6.100000 3.1816190915e+00
3243 W_thzero 10.0 6.150000 3.1816199231e+00
3244 W_thzero 10.0 6.200000 3.1816207539e+00
3245 W_thzero 10.0 6.250000 3.1816215840e+00
3246 W_thzero 10.0 6.300000 3.1816224132e+00
3247 W_thzero 10.0 6.350000 3.1816232415e+00
3248 W_thzero 10.0 6.400000 3.1816240690e+00
3249 W_thzero 10.0 6.450000 3.1816248956e+00
3250 W_thzero 10.0 6.500000 3.1816257213e+00
3251 W_thzero 10.0 6.550000 3.1816265461e+00
3252 W_thzero 10.0 6.600000 3.1816273699e+00
3253 W_thzero 10.0 6.650000 3.1816281927e+00
3254 W_thzero 10.0 6.700000 3.1816290145e+00
3255 W_thzero 10.0 6.750000 3.1816298352e+00
3256 W_thzero 10.0 6.800000 3.1816306550e+00
3257 W_thzero 10.0 6.850000 3.1816314737e+00
3258 W_thzero 10.0 6.900000 3.1816322912e+00
3259 W_thzero 10.0 6.950000 3.1816331077e+00
3260 W_thzero 10.0 7.000000 3.1816339231e+00
3261 W_thzero 10.0 7.050000 3.1816347373e+00
3262 W_thzero 10.0 7.100000 3.1816355504e+00
3263 W_thzero 10.0 7.150000 3.1816363623e+00
3264 W_thzero 10.0 7.200000 3.1816371729e+00
3265 W_thzero 10.0 7.250000 3.1816379824e+00
3266 W_thzero 10.0 7.300000 3.1816387907e+00
3267 W_thzero 10.0 7.350000 3.1816395977e+00
3268 W_thzero 10.0 7.400000 3.1816404034e+00
3269 W_thzero 10.0 7.450000 3.1816412079e+00
3270 W_thzero 10.0 7.500000 3.1816420111e+00
3271 W_thzero 10.0 7.550000 3.1816428129e+00
3272 W_thzero 10.0 7.600000 3.1816436135e+00
3273 W_thzero 10.0 7.650000 3.1816444127e+00
3274 W_thzero 10.0 7.700000 3.1816452105e+00
3275 W_thzero 10.0 7.750000 3.1816460070e+00
3276 W_thzero 10.0 7.800000 3.1816468021e+00
3277 W_thzero 10.0 7.850000 3.1816475958e+00
3278 W_thzero 10.0 7.900000 3.1816483881e+00
3279 W_thzero 10.0 7.950000 3.1816491790e+00
3280 W_thzero 10.0 8.000000 3.1816499684e+00
3281 W_thzero 10.0 8.050000 3.1816507564e+00
3282 W_thzero 10.0 8.100000 3.1816515429e+00
3283 W_thzero 10.0 8.150000 3.1816523280e+00
3284 W_thzero 10.0 8.200000 3.1816531116e+00
3285 W_thzero 10.0 8.250000 3.1816538937e+00
3286 W_thzero 10.0 8.300000 3.1816546742e+00
3287 W_thzero 10.0 8.350000 3.1816554533e+00
3288 W_thzero 10.0 8.400000 3.1816562308e+00
3289 W_thzero 10.0 8.450000 3.1816570068e+00
3290 W_thzero 10.0 8.500000 3.1816577813e+00
3291 W_thzero 10.0 8.550000 3.1816585541e+00
3292 W_thzero 10.0 8.600000 3.1816593254e+00
3293 W_thzero 10.0 8.650000 3.1816600952e+00
3294 W_thzero 10.0 8.700000 3.1816608633e+00
3295 W_thzero 10.0 8.750000 3.1816616299e+00
3296 W_thzero 10.0 8.800000 3.1816623948e+00
3297 W_thzero 10.0 8.850000 3.1816631581e+00
3298 W_thzero 10.0 8.900000 3.1816639198e+00
3299 W_thzero 10.0 8.950000 3.1816646799e+00
3300 W_thzero 10.0 9.000000 3.1816654383e+00
3301 W_thzero 10.0 9.050000 3.1816661951e+00
3302 W_thzero 10.0 9.100000 3.1816669502e+00
3303 W_thzero 10.0 9.150000 3.1816677036e+00
3304 W_thzero 10.0 9.200000 3.1816684554e+00
3305 W_thzero 10.0 9.250000 3.1816692055e+00
3306 W_thzero 10.0 9.300000 3.1816699539e+00
3307 W_thzero 10.0 9.350000 3.1816707006e+00
3308 W_thzero 10.0 9.400000 3.1816714456e+00
3309 W_thzero 10.0 9.450000 3.1816721889e+00
3310 W_thzero 10.0 9.500000 3.1816729305e+00
3311 W_thzero 10.0 9.550000 3.1816736704e+00
3312 W_thzero 10.0 9.600000 3.1816744085e+00
3313 W_thzero 10.0 9.650000 3.1816751449e+00
3314 W_thzero 10.0 9.700000 3.1816758796e+00
3315 W_thzero 10.0 9.750000 3.1816766125e+00
3316 W_thzero 10.0 9.800000 3.1816773437e+00
3317 W_thzero 10.0 9.850000 3.1816780731e+00
3318 W_thzero 10.0 9.900000 3.1816788008e+00
3319 W_thzero 10.0 9.950000 3.1816795267e+00
3320 W_thzero 10.0 10.000000 3.1816802508e+00
3321 W_thzero 10.0 10.050000 3.1816809732e+00
3322 W_thzero 10.0 10.100000 3.1816816937e+00
3323 W_thzero 10.0 10.150000 3.1816824125e+00
3324 W_thzero 10.0 10.200000 3.1816831295e+00
3325 W_thzero 10.0 10.250000 3.1816838447e+00
3326 W_thzero 10.0 10.300000 3.1816845581e+00
3327 W_thzero 10.0 10.350000 3.1816852697e+00
3328 W_thzero 10.0 10.400000 3.1816859795e+00
3329 W_thzero 10.0 10.450000 3.1816866875e+00
3330 W_thzero 10.0 10.500000 3.1816873937e+00
3331 W_thzero 10.0 10.550000 3.1816880981e+00
3332 W_thzero 10.0 10.600000 3.1816888006e+00
3333 W_thzero 10.0 10.650000 3.1816895014e+00
3334 W_thzero 10.0 10.700000 3.1816902003e+00
3335 W_thzero 10.0 10.750000 3.1816908974e+00
3336 W_thzero 10.0 10.800000 3.1816915926e+00
3337 W_thzero 10.0 10.850000 3.1816922860e+00
3338 W_thzero 10.0 10.900000 3.1816929776e+00
3339 W_thzero 10.0 10.950000 3.1816936673e+00
3340 W_thzero 10.0 11.000000 3.1816943552e+00
3341 W_thzero 10.0 11.050000 3.1816950413e+00
3342 W_thzero 10.0 11.100000 3.1816957255e+00
3343 W_thzero 10.0 11.150000 3.1816964079e+00
3344 W_thzero 10.0 11.200000 3.1816970884e+00
3345 W_thzero 10.0 11.250000 3.1816977670e+00
3346 W_thzero 10.0 11.300000 3.1816984439e+00
3347 W_thzero 10.0 11.350000 3.1816991188e+00
3348 W_thzero 10.0 11.400000 3.1816997919e+00
3349 W_thzero 10.0 11.450000 3.1817004632e+00
3350 W_thzero 10.0 11.500000 3.1817011325e+00
3351 W_thzero 10.0 11.550000 3.1817018001e+00
3352 W_thzero 10.0 11.600000 3.1817024657e+00
3353 W_thzero 10.0 11.650000 3.1817031295e+00
3354 W_thzero 10.0 11.700000 3.1817037915e+00
3355 W_thzero 10.0 11.750000 3.1817044515e+00
3356 W_thzero 10.0 11.800000 3.1817051097e+00
3357 W_thzero 10.0 11.850000 3.1817057661e+00
3358 W_thzero 10.0 11.900000 3.1817064206e+00
3359 W_thzero 10.0 11.950000 3.1817070732e+00
3360 W_thzero 10.0 12.000000 3.1817077239e+00
3361 W_thzero 10.0 12.050000 3.1817083728e+00
3362 W_thzero 10.0 12.100000 3.1817090198e+00
3363 W_thzero 10.0 12.150000 3.1817096649e+00
3364 W_thzero 10.0 12.200000 3.1817103082e+00
3365 W_thzero 10.0 12.250000 3.1817109495e+00
3366 W_thzero 10.0 12.300000 3.1817115891e+00
3367 W_thzero 10.0 12.350000 3.1817122267e+00
3368 W_thzero 10.0 12.400000 3.1817128625e+00
3369 W_thzero 10.0 12.450000 3.1817134964e+00
3370 W_thzero 10.0 12.500000 3.1817141285e+00
3371 W_thzero 10.0 12.550000 3.1817147586e+00
3372 W_thzero 10.0 12.600000 3.1817153870e+00
3373 W_thzero 10.0 12.650000 3.1817160134e+00
3374 W_thzero 10.0 12.700000 3.1817166380e+00
3375 W_thzero 10.0 12.750000 3.1817172607e+00
3376 W_thzero 10.0 12.800000 3.1817178815e+00
3377 W_thzero 10.0 12.850000 3.1817185005e+00
3378 W_thzero 10.0 12.900000 3.1817191176e+00
3379 W_thzero 10.0 12.950000 3.1817197328e+00
3380 W_thzero 10.0 13.000000 3.1817203462e+00
3381 W_thzero 10.0 13.050000 3.1817209577e+00
3382 W_thzero 10.0 13.100000 3.1817215674e+00
3383 W_thzero 10.0 13.150000 3.1817221752e+00
3384 W_thzero 10.0 13.200000 3.1817227811e+00
3385 W_thzero 10.0 13.250000 3.1817233852e+00
3386 W_thzero 10.0 13.300000 3.1817239875e+00
3387 W_thzero 10.0 13.350000 3.1817245878e+00
3388 W_thzero 10.0 13.400000 3.1817251864e+00
3389 W_thzero 10.0 13.450000 3.1817257830e+00
3390 W_thzero 10.0 13.500000 3.1817263778e+00
3391 W_thzero 10.0 13.550000 3.1817269708e+00
3392 W_thzero 10.0 13.600000 3.1817275619e+00
3393 W_thzero 10.0 13.650000 3.1817281512e+00
3394 W_thzero 10.0 13.700000 3.1817287386e+00
3395 W_thzero 10.0 13.750000 3.1817293242e+00
3396 W_thzero 10.0 13.800000 3.1817299080e+00
3397 W_thzero 10.0 13.850000 3.1817304899e+00
3398 W_thzero 10.0 13.900000 3.1817310699e+00
3399 W_thzero 10.0 13.950000 3.1817316482e+00
3400 W_thzero 10.0 14.000000 3.1817322246e+00
3401 W_thzero 10.0 14.050000 3.1817327992e+00
3402 W_thzero 10.0 14.100000 3.1817333719e+00
3403 W_thzero 10.0 14.150000 3.1817339428e+00
3404 W_thzero 10.0 14.200000 3.1817345119e+00
3405 W_thzero 10.0 14.250000 3.1817350792e+00
3406 W_thzero 10.0 14.300000 3.1817356447e+00
3407 W_thzero 10.0 14.350000 3.1817362083e+00
3408 W_thzero 10.0 14.400000 3.1817367701e+00
3409 W_thzero 10.0 14.450000 3.1817373301e+00
3410 W_thzero 10.0 14.500000 3.1817378883e+00
3411 W_thzero 10.0 14.550000 3.1817384447e+00
3412 W_thzero 10.0 14.600000 3.1817389993e+00
3413 W_thzero 10.0 14.650000 3.1817395521e+00
3414 W_thzero 10.0 14.700000 3.1817401031e+00
3415 W_thzero 10.0 14.750000 3.1817406523e+00
3416 W_thzero 10.0 14.800000 3.1817411996e+00
3417 W_thzero 10.0 14.850000 3.1817417452e+00
3418 W_thzero 10.0 14.900000 3.1817422891e+00
3419 W_thzero 10.0 14.950000 3.1817428311e+00
3420 W_thzero 10.0 15.000000 3.1817433713e+00
3421 W_thzero 10.0 15.050000 3.1817439098e+00
3422 W_thzero 10.0 15.100000 3.1817444465e+00
3423 W_thzero 10.0 15.150000 3.1817449814e+00
3424 W_thzero 10.0 15.200000 3.1817455145e+00
3425 W_thzero 10.0 15.250000 3.1817460459e+00
3426 W_thzero 10.0 15.300000 3.1817465755e+00
3427 W_thzero 10.0 15.350000 3.1817471034e+00
3428 W_thzero 10.0 15.400000 3.1817476294e+00
3429 W_thzero 10.0 15.450000 3.1817481538e+00
3430 W_thzero 10.0 15.500000 3.1817486763e+00
3431 W_thzero 10.0 15.550000 3.1817491972e+00
3432 W_thzero 10.0 15.600000 3.1817497163e+00
3433 W_thzero 10.0 15.650000 3.1817502336e+00
3434 W_thzero 10.0 15.700000 3.1817507492e+00
3435 W_thzero 10.0 15.750000 3.1817512631e+00
3436 W_thzero 10.0 15.800000 3.1817517752e+00
3437 W_thzero 10.0 15.850000 3.1817522856e+00
3438 W_thzero 10.0 15.900000 3.1817527943e+00
3439 W_thzero 10.0 15.950000 3.1817533012e+00
3440 W_thzero 10.0 16.000000 3.1817538065e+00
3441 W_thzero 10.0 16.050000 3.1817543100e+00
3442 W_thzero 10.0 16.100000 3.1817548118e+00
3443 W_thzero 10.0 16.150000 3.1817553119e+00
3444 W_thzero 10.0 16.200000 3.1817558103e+00
3445 W_thzero 10.0 16.250000 3.1817563070e+00
3446 W_thzero 10.0 16.300000 3.1817568020e+00
3447 W_thzero 10.0 16.350000 3.1817572953e+00
3448 W_thzero 10.0 16.400000 3.1817577869e+00
3449 W_thzero 10.0 16.450000 3.1817582769e+00
3450 W_thzero 10.0 16.500000 3.1817587651e+00
3451 W_thzero 10.0 16.550000 3.1817592517e+00
3452 W_thzero 10.0 16.600000 3.1817597366e+00
3453 W_thzero 10.0 16.650000 3.1817602198e+00
3454 W_thzero 10.0 16.700000 3.1817607014e+00
3455 W_thzero 10.0 16.750000 3.1817611813e+00
3456 W_thzero 10.0 16.800000 3.1817616595e+00
3457 W_thzero 10.0 16.850000 3.1817621361e+00
3458 W_thzero 10.0 16.900000 3.1817626110e+00
3459 W_thzero 10.0 16.950000 3.1817630843e+00
3460 W_thzero 10.0 17.000000 3.1817635560e+00
3461 W_thzero 10.0 17.050000 3.1817640260e+00
3462 W_thzero 10.0 17.100000 3.1817644943e+00
3463 W_thzero 10.0 17.150000 3.1817649611e+00
3464 W_thzero 10.0 17.200000 3.1817654262e+00
3465 W_thzero 10.0 17.250000 3.1817658897e+00
3466 W_thzero 10.0 17.300000 3.1817663516e+00
3467 W_thzero 10.0 17.350000 3.1817668118e+00
3468 W_thzero 10.0 17.400000 3.1817672705e+00
3469 W_thzero 10.0 17.450000 3.1817677275e+00
3470 W_thzero 10.0 17.500000 3.1817681830e+00
3471 W_thzero 10.0 17.550000 3.1817686368e+00
3472 W_thzero 10.0 17.600000 3.1817690890e+00
3473 W_thzero 10.0 17.650000 3.1817695397e+00
3474 W_thzero 10.0 17.700000 3.1817699888e+00
3475 W_thzero 10.0 17.750000 3.1817704363e+00
3476 W_thzero 10.0 17.800000 3.1817708822e+00
3477 W_thzero 10.0 17.850000 3.1817713265e+00
3478 W_thzero 10.0 17.900000 3.1817717693e+00
3479 W_thzero 10.0 17.950000 3.1817722105e+00
3480 W_thzero 10.0 18.000000 3.1817726502e+00
3481 W_thzero 10.0 18.050000 3.1817730883e+00
3482 W_thzero 10.0 18.100000 3.1817735248e+00
3483 W_thzero 10.0 18.150000 3.1817739598e+00
3484 W_thzero 10.0 18.200000 3.1817743933e+00
3485 W_thzero 10.0 18.250000 3.1817748252e+00
3486 W_thzero 10.0 18.300000 3.1817752556e+00
3487 W_thzero 10.0 18.350000 3.1817756845e+00
3488 W_thzero 10.0 18.400000 3.1817761118e+00
3489 W_thzero 10.0 18.450000 3.1817765376e+00
3490 W_thzero 10.0 18.500000 3.1817769619e+00
3491 W_thzero 10.0 18.550000 3.1817773847e+00
3492 W_thzero 10.0 18.600000 3.1817778060e+00
3493 W_thzero 10.0 18.650000 3.1817782258e+00
3494 W_thzero 10.0 18.700000 3.1817786441e+00
3495 W_thzero 10.0 18.750000 3.1817790609e+00
3496 W_thzero 10.0 18.800000 3.1817794762e+00
3497 W_thzero 10.0 18.850000 3.1817798900e+00
3498 W_thzero 10.0 18.900000 3.1817803024e+00
3499 W_thzero 10.0 18.950000 3.1817807132e+00
3500 W_thzero 10.0 19.000000 3.1817811226e+00
3501 W_thzero 10.0 19.050000 3.1817815305e+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())