TransitionListener 2.1.0__tar.gz → 2.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (347) hide show
  1. transitionlistener-2.2.0/.github/copilot-instructions.md +109 -0
  2. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/.gitignore +3 -0
  3. transitionlistener-2.2.0/AGENTS.md +19 -0
  4. transitionlistener-2.2.0/CHANGELOG.md +714 -0
  5. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/CITATION.cff +2 -2
  6. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/PKG-INFO +4 -2
  7. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/conda/meta.yaml +1 -1
  8. transitionlistener-2.2.0/docs/check_docs_math.py +115 -0
  9. transitionlistener-2.2.0/docs/check_docs_style.py +788 -0
  10. transitionlistener-2.2.0/docs/check_figure_style.py +470 -0
  11. transitionlistener-2.2.0/docs/docs_gallery.yaml +74 -0
  12. transitionlistener-2.2.0/docs/docs_gallery_2hdm.yaml +53 -0
  13. transitionlistener-2.2.0/docs/make_algorithm_figures.py +850 -0
  14. transitionlistener-2.2.0/docs/notes/plasma_bookkeeping.pdf +0 -0
  15. transitionlistener-2.2.0/docs/notes/plasma_bookkeeping.tex +184 -0
  16. transitionlistener-2.2.0/docs/source/_static/2hdm_lambda3_tracer_and_pairing_fixes.png +0 -0
  17. transitionlistener-2.2.0/docs/source/_static/TL-logo_large.png +0 -0
  18. transitionlistener-2.2.0/docs/source/_static/algorithm_fluid_profiles.png +0 -0
  19. transitionlistener-2.2.0/docs/source/_static/algorithm_images.png +0 -0
  20. transitionlistener-2.2.0/docs/source/_static/algorithm_plasma_dof.png +0 -0
  21. transitionlistener-2.2.0/docs/source/_static/algorithm_potential_2d.png +0 -0
  22. transitionlistener-2.2.0/docs/source/_static/algorithm_potential_vs_temperature.png +0 -0
  23. transitionlistener-2.2.0/docs/source/_static/algorithm_rate_and_support.png +0 -0
  24. transitionlistener-2.2.0/docs/source/_static/algorithm_shooting.png +0 -0
  25. transitionlistener-2.2.0/docs/source/_static/algorithm_spectrum_sources.png +0 -0
  26. transitionlistener-2.2.0/docs/source/_static/example_kappa.png +0 -0
  27. transitionlistener-2.2.0/docs/source/_static/example_output/2608.13692_fig4.png +0 -0
  28. transitionlistener-2.2.0/docs/source/_static/example_output/2608.23679_fig3.png +0 -0
  29. transitionlistener-2.2.0/docs/source/_static/example_output/fig14_alpha_betaH.png +0 -0
  30. transitionlistener-2.2.0/docs/source/_static/example_point_GW_spectrum.png +0 -0
  31. transitionlistener-2.2.0/docs/source/_static/mirror_image_pairing.png +0 -0
  32. transitionlistener-2.2.0/docs/source/_static/pairing_action_and_separation.png +0 -0
  33. transitionlistener-2.2.0/docs/source/_static/paper_reheating_selfconsistent.png +0 -0
  34. transitionlistener-2.2.0/docs/source/_static/pipeline.png +0 -0
  35. transitionlistener-2.2.0/docs/source/_static/plots/GW_sensitivities.png +0 -0
  36. transitionlistener-2.2.0/docs/source/_static/plots/GW_spectrum.png +0 -0
  37. transitionlistener-2.2.0/docs/source/_static/plots/action.png +0 -0
  38. transitionlistener-2.2.0/docs/source/_static/plots/dofs.png +0 -0
  39. transitionlistener-2.2.0/docs/source/_static/plots/percolation_0.png +0 -0
  40. transitionlistener-2.2.0/docs/source/_static/plots/phases.png +0 -0
  41. transitionlistener-2.2.0/docs/source/_static/plots/potential.png +0 -0
  42. transitionlistener-2.2.0/docs/source/_static/plots/profile.png +0 -0
  43. transitionlistener-2.2.0/docs/source/_static/plots/profileV.png +0 -0
  44. transitionlistener-2.2.0/docs/source/_static/plots/rho.png +0 -0
  45. transitionlistener-2.2.0/docs/source/algorithms/error_reference.rst +202 -0
  46. transitionlistener-2.2.0/docs/source/algorithms/hydrodynamics.rst +260 -0
  47. transitionlistener-2.2.0/docs/source/algorithms/index.rst +79 -0
  48. transitionlistener-2.2.0/docs/source/algorithms/nucleation_and_percolation.rst +422 -0
  49. transitionlistener-2.2.0/docs/source/algorithms/phases_and_transitions.rst +110 -0
  50. transitionlistener-2.2.0/docs/source/algorithms/the_bounce_action.rst +233 -0
  51. transitionlistener-2.2.0/docs/source/algorithms/the_effective_potential.rst +205 -0
  52. transitionlistener-2.2.0/docs/source/algorithms/the_observables.rst +251 -0
  53. transitionlistener-2.2.0/docs/source/algorithms/the_plasma.rst +134 -0
  54. transitionlistener-2.2.0/docs/source/algorithms/the_plots.rst +349 -0
  55. transitionlistener-2.2.0/docs/source/algorithms/the_spectrum.rst +322 -0
  56. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/conf.py +2 -2
  57. transitionlistener-2.2.0/docs/source/example_output.md +88 -0
  58. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/faq.rst +2 -2
  59. transitionlistener-2.2.0/docs/source/features.rst +127 -0
  60. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/getting_started.rst +11 -9
  61. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/index.rst +5 -15
  62. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/installation.rst +10 -10
  63. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/usage.rst +37 -75
  64. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/examples/bp_lisa.yaml +1 -1
  65. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/models/TL_2HDM.py +11 -3
  66. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/models/TL_2HDM_BSMPT.py +32 -13
  67. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/models/TL_conformal_dark_u1.py +29 -0
  68. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/models/TL_dark_U1.py +8 -2
  69. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/models/TL_dark_U1_g_parameterization.py +3 -1
  70. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/models/TL_dark_flipflop.py +1 -1
  71. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/models/templatePotential.py +22 -20
  72. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/pyproject.toml +3 -1
  73. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/__init__.py +4 -3
  74. transitionlistener-2.2.0/src/transitionlistener/bubbledynamics.py +4192 -0
  75. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/bubbledynamics_fixedstep.py +288 -77
  76. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/ckm.py +1 -1
  77. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/colors.py +1 -1
  78. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/config.py +113 -7
  79. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/constants.py +16 -1
  80. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/counterterms/__init__.py +1 -1
  81. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/counterterms/cw.py +1 -1
  82. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/counterterms/tensors.py +1 -1
  83. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/counterterms/twohdm.py +1 -1
  84. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/counterterms/twohdm_solver.py +1 -1
  85. transitionlistener-2.2.0/src/transitionlistener/errors.py +514 -0
  86. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/finiteT.py +4 -1
  87. transitionlistener-2.2.0/src/transitionlistener/generic_potential.py +2216 -0
  88. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/gridplots.py +4 -4
  89. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/gwfopt.py +9 -4
  90. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/helper_functions.py +256 -18
  91. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/hydrodynamics.py +343 -29
  92. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/interface/__init__.py +1 -1
  93. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/interface/cli.py +2 -2
  94. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/interface/config_loader.py +4 -1
  95. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/interface/logging_utils.py +1 -1
  96. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/interface/output_schema.py +14 -1
  97. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/interface/pipeline.py +58 -4
  98. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/interface/samplers.py +46 -4
  99. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/interface/scans.py +43 -1
  100. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/interface/single_point.py +49 -5
  101. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/interface/state.py +1 -1
  102. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/lineplots.py +4 -4
  103. transitionlistener-2.2.0/src/transitionlistener/logo/TL-logo_large.png +0 -0
  104. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/nucleation.py +21 -3
  105. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/observability.py +303 -17
  106. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/particles.py +23 -2
  107. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/pathDeformation.py +850 -68
  108. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/percolation_adaptive_gridbuilders.py +414 -10
  109. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/percolation_adaptive_rate.py +92 -27
  110. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/percolation_adaptivestepsize.py +657 -47
  111. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/percolation_fixedstepsize.py +37 -13
  112. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/phases.py +662 -67
  113. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/plot_settings.py +34 -1
  114. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/plots.py +247 -73
  115. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/runtime_options.py +55 -1
  116. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ipta2_cp_v1/bandwidths.npy +0 -0
  117. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ipta2_cp_v1/density.npy +0 -0
  118. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ipta2_cp_v1/freqs.npy +0 -0
  119. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ipta2_cp_v1/log.txt +20 -0
  120. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ipta2_cp_v1/log10rhogrid.npy +0 -0
  121. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ipta2_cp_v1/log10rholabels.txt +30 -0
  122. {transitionlistener-2.1.0/src/transitionlistener/tab_data/30f_fs{hd}_100fDMGP_ceffyl → transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ipta2_cp_v1}/pulsar_list.txt +0 -0
  123. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng12p5_cp_v1/bandwidths.npy +0 -0
  124. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng12p5_cp_v1/density.npy +0 -0
  125. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng12p5_cp_v1/freqs.npy +0 -0
  126. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng12p5_cp_v1/log.txt +20 -0
  127. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng12p5_cp_v1/log10rhogrid.npy +0 -0
  128. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng12p5_cp_v1/log10rholabels.txt +30 -0
  129. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng12p5_cp_v1/pulsar_list.txt +1 -0
  130. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_cp_v1/bandwidths.npy +0 -0
  131. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_cp_v1/density.npy +0 -0
  132. {transitionlistener-2.1.0/src/transitionlistener/tab_data/30f_fs{hd}_100fDMGP_ceffyl → transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_cp_v1}/freqs.npy +0 -0
  133. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_cp_v1/log.txt +20 -0
  134. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_cp_v1/log10rhogrid.npy +0 -0
  135. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_cp_v1/log10rholabels.txt +30 -0
  136. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_cp_v1/pulsar_list.txt +1 -0
  137. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_cp_v2/bandwidths.npy +0 -0
  138. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_cp_v2/density.npy +0 -0
  139. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_cp_v2/freqs.npy +0 -0
  140. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_cp_v2/log.txt +20 -0
  141. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_cp_v2/log10rhogrid.npy +0 -0
  142. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_cp_v2/log10rholabels.txt +30 -0
  143. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_cp_v2/pulsar_list.txt +1 -0
  144. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_dmgp_v1/freqs.npy +0 -0
  145. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_dmgp_v1/pulsar_list.txt +1 -0
  146. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_v1/bandwidths.npy +0 -0
  147. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_v1/density.npy +0 -0
  148. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_v1/freqs.npy +0 -0
  149. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_v1/log.txt +20 -0
  150. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_v1/log10rhogrid.npy +0 -0
  151. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_v1/log10rholabels.txt +30 -0
  152. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_v1/pulsar_list.txt +1 -0
  153. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_v2/bandwidths.npy +0 -0
  154. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_v2/density.npy +0 -0
  155. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_v2/freqs.npy +0 -0
  156. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_v2/log.txt +20 -0
  157. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_v2/log10rhogrid.npy +0 -0
  158. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_v2/log10rholabels.txt +30 -0
  159. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_v2/pulsar_list.txt +1 -0
  160. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hdall_v2/bandwidths.npy +0 -0
  161. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hdall_v2/density.npy +0 -0
  162. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hdall_v2/freqs.npy +0 -0
  163. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hdall_v2/log.txt +20 -0
  164. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hdall_v2/log10rhogrid.npy +0 -0
  165. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hdall_v2/log10rholabels.txt +30 -0
  166. transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hdall_v2/pulsar_list.txt +1 -0
  167. transitionlistener-2.2.0/src/transitionlistener/thermodynamics.py +959 -0
  168. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/transitionObservables.py +541 -93
  169. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/transitionObservables_fixedstep.py +242 -63
  170. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/transitions.py +144 -13
  171. transitionlistener-2.2.0/src/transitionlistener/tunneling1D.py +1303 -0
  172. transitionlistener-2.2.0/tests/test_1d_tunneling.py +179 -0
  173. transitionlistener-2.2.0/tests/test_a_clean_install_can_load_every_model.py +227 -0
  174. transitionlistener-2.2.0/tests/test_a_failed_scan_point_writes_its_cause.py +237 -0
  175. transitionlistener-2.2.0/tests/test_a_phase_stays_on_one_image.py +493 -0
  176. transitionlistener-2.2.0/tests/test_accuracy_observables_registered.py +72 -0
  177. transitionlistener-2.2.0/tests/test_accuracy_verdict_producer.py +214 -0
  178. transitionlistener-2.2.0/tests/test_accuracy_verdict_reported.py +230 -0
  179. transitionlistener-2.2.0/tests/test_action_budget_accounting.py +127 -0
  180. transitionlistener-2.2.0/tests/test_action_provenance.py +155 -0
  181. transitionlistener-2.2.0/tests/test_action_rescue_diagnostics.py +452 -0
  182. transitionlistener-2.2.0/tests/test_adaptive_path_basis.py +145 -0
  183. transitionlistener-2.2.0/tests/test_alpha_normalisation.py +168 -0
  184. transitionlistener-2.2.0/tests/test_betaH_S3_fit.py +127 -0
  185. transitionlistener-2.2.0/tests/test_bisection_bracket_scale.py +251 -0
  186. transitionlistener-2.2.0/tests/test_boundary_approach_refinement.py +626 -0
  187. transitionlistener-2.2.0/tests/test_bubble_separation_expansion.py +829 -0
  188. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/tests/test_bubbledynamics_calcaction_cache.py +9 -2
  189. transitionlistener-2.2.0/tests/test_cold_walk_stops_without_bounce.py +154 -0
  190. transitionlistener-2.2.0/tests/test_counterterm_step.py +911 -0
  191. transitionlistener-2.2.0/tests/test_dead_rate_floor.py +127 -0
  192. transitionlistener-2.2.0/tests/test_dead_rate_points_are_not_promoted.py +162 -0
  193. transitionlistener-2.2.0/tests/test_decoupled_bath.py +662 -0
  194. transitionlistener-2.2.0/tests/test_diagnostic_messages_say_what_happened.py +1135 -0
  195. transitionlistener-2.2.0/tests/test_docs_style.py +640 -0
  196. transitionlistener-2.2.0/tests/test_docstrings_name_real_parameters.py +155 -0
  197. transitionlistener-2.2.0/tests/test_double_integral_subgrid.py +316 -0
  198. transitionlistener-2.2.0/tests/test_entropy_scheme_sensitivity.py +670 -0
  199. transitionlistener-2.2.0/tests/test_eternal_inflation_fields.py +135 -0
  200. transitionlistener-2.2.0/tests/test_exempted_repair_does_not_preempt_remesh.py +214 -0
  201. transitionlistener-2.2.0/tests/test_extreme_supercooling_guards.py +688 -0
  202. transitionlistener-2.2.0/tests/test_false_vacuum_criterion.py +179 -0
  203. transitionlistener-2.2.0/tests/test_fatal_jump_is_always_repairable.py +178 -0
  204. transitionlistener-2.2.0/tests/test_flipflop_counterterm_is_quartic.py +189 -0
  205. transitionlistener-2.2.0/tests/test_gw_spectrum_plot.py +210 -0
  206. transitionlistener-2.2.0/tests/test_irreparable_outlier_is_discarded.py +169 -0
  207. transitionlistener-2.2.0/tests/test_jitter_dead_rate.py +145 -0
  208. transitionlistener-2.2.0/tests/test_jitter_rescue_has_margin.py +105 -0
  209. transitionlistener-2.2.0/tests/test_max_al_searches_the_range.py +255 -0
  210. transitionlistener-2.2.0/tests/test_maxit_warning_is_not_a_false_alarm.py +127 -0
  211. transitionlistener-2.2.0/tests/test_model_declared_fratioconv.py +79 -0
  212. transitionlistener-2.2.0/tests/test_no_point_is_reported_as_error_minus_one.py +291 -0
  213. transitionlistener-2.2.0/tests/test_path_deformation_flat.py +231 -0
  214. transitionlistener-2.2.0/tests/test_path_extension_is_local.py +514 -0
  215. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/tests/test_percintegral_ode.py +75 -2
  216. transitionlistener-2.2.0/tests/test_percolation_estimate_takes_the_hottest_root.py +615 -0
  217. transitionlistener-2.2.0/tests/test_percolation_integral_nonfinite_guard.py +97 -0
  218. transitionlistener-2.2.0/tests/test_phase_interpolation_does_not_overshoot.py +217 -0
  219. transitionlistener-2.2.0/tests/test_physical_sound_speed.py +1755 -0
  220. transitionlistener-2.2.0/tests/test_potential_broadcasting.py +128 -0
  221. transitionlistener-2.2.0/tests/test_potential_samples_resolve_the_barrier.py +204 -0
  222. transitionlistener-2.2.0/tests/test_pseudotrace_sound_speed.py +199 -0
  223. transitionlistener-2.2.0/tests/test_radial_step_floor.py +494 -0
  224. transitionlistener-2.2.0/tests/test_rate_peak_nonfinite_rate.py +110 -0
  225. transitionlistener-2.2.0/tests/test_rate_step_refinement.py +150 -0
  226. transitionlistener-2.2.0/tests/test_rate_vanishes_above_the_computed_actions.py +236 -0
  227. transitionlistener-2.2.0/tests/test_rejection_names_the_real_limit.py +122 -0
  228. transitionlistener-2.2.0/tests/test_release_smoke.py +315 -0
  229. transitionlistener-2.2.0/tests/test_rh_convergence_is_tested.py +81 -0
  230. transitionlistener-2.2.0/tests/test_rh_second_estimate.py +250 -0
  231. transitionlistener-2.2.0/tests/test_scout_free_bank_is_usable.py +180 -0
  232. transitionlistener-2.2.0/tests/test_shooting_tolerance_scale.py +289 -0
  233. transitionlistener-2.2.0/tests/test_spline_tnuc_large_integral.py +238 -0
  234. transitionlistener-2.2.0/tests/test_step3_saturated_tail_stays_finite.py +211 -0
  235. transitionlistener-2.2.0/tests/test_symmetric_phase_projection.py +371 -0
  236. transitionlistener-2.2.0/tests/test_temperature_derivative_step.py +174 -0
  237. transitionlistener-2.2.0/tests/test_temperature_tolerance_scale.py +427 -0
  238. transitionlistener-2.2.0/tests/test_the_bounce_action_must_converge.py +368 -0
  239. transitionlistener-2.2.0/tests/test_the_bounce_solver_error_paths.py +335 -0
  240. transitionlistener-2.2.0/tests/test_the_canonical_image_is_unambiguous.py +454 -0
  241. transitionlistener-2.2.0/tests/test_the_contour_cap_is_configurable.py +116 -0
  242. transitionlistener-2.2.0/tests/test_the_error_reference_is_complete.py +144 -0
  243. transitionlistener-2.2.0/tests/test_the_integrator_error_estimate.py +222 -0
  244. transitionlistener-2.2.0/tests/test_the_percolation_panel_draws_the_nucleation_line.py +75 -0
  245. transitionlistener-2.2.0/tests/test_the_pta_data_ships_with_the_code.py +404 -0
  246. transitionlistener-2.2.0/tests/test_the_run_deadline_is_not_a_verdict.py +278 -0
  247. transitionlistener-2.2.0/tests/test_the_tbro_guard_asserts_the_energy_ordering.py +497 -0
  248. transitionlistener-2.2.0/tests/test_the_tracer_follows_a_minimum.py +627 -0
  249. transitionlistener-2.2.0/tests/test_the_transition_pairs_on_one_image.py +1543 -0
  250. transitionlistener-2.2.0/tests/test_the_untested_error_paths.py +368 -0
  251. transitionlistener-2.2.0/tests/test_the_version_is_one_number.py +71 -0
  252. transitionlistener-2.2.0/tests/test_the_zero_temperature_minimum_check.py +468 -0
  253. transitionlistener-2.2.0/tests/test_unusable_slope_rejects_the_trial.py +500 -0
  254. transitionlistener-2.2.0/tests/test_vwall_no_solution_flag.py +155 -0
  255. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/tests/test_warning_outputs.py +1 -0
  256. transitionlistener-2.1.0/CHANGELOG.md +0 -238
  257. transitionlistener-2.1.0/docs/source/_static/TL-logo_large.png +0 -0
  258. transitionlistener-2.1.0/docs/source/_static/example_kappa.png +0 -0
  259. transitionlistener-2.1.0/docs/source/_static/example_output/fig14_alpha_betaH.png +0 -0
  260. transitionlistener-2.1.0/docs/source/_static/example_point_GW_spectrum.png +0 -0
  261. transitionlistener-2.1.0/docs/source/_static/pipeline.png +0 -0
  262. transitionlistener-2.1.0/docs/source/documentation.rst +0 -50
  263. transitionlistener-2.1.0/docs/source/example_output.md +0 -138
  264. transitionlistener-2.1.0/docs/source/features.rst +0 -37
  265. transitionlistener-2.1.0/docs/source/method.rst +0 -145
  266. transitionlistener-2.1.0/docs/source/plots.rst +0 -49
  267. transitionlistener-2.1.0/src/transitionlistener/bubbledynamics.py +0 -2250
  268. transitionlistener-2.1.0/src/transitionlistener/errors.py +0 -315
  269. transitionlistener-2.1.0/src/transitionlistener/generic_potential.py +0 -1521
  270. transitionlistener-2.1.0/src/transitionlistener/logo/TL-logo_large.png +0 -0
  271. transitionlistener-2.1.0/src/transitionlistener/thermodynamics.py +0 -686
  272. transitionlistener-2.1.0/src/transitionlistener/tunneling1D.py +0 -910
  273. transitionlistener-2.1.0/tests/test_1d_tunneling.py +0 -43
  274. transitionlistener-2.1.0/tests/test_paper_benchmark_common.py +0 -65
  275. transitionlistener-2.1.0/tests/test_release_smoke.py +0 -159
  276. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  277. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  278. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/.github/workflows/ci.yml +0 -0
  279. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/.github/workflows/docs.yml +0 -0
  280. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/.github/workflows/publish.yml +0 -0
  281. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/LICENSE.txt +0 -0
  282. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/README.md +0 -0
  283. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/Makefile +0 -0
  284. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/2109.06208_example.png +0 -0
  285. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/2311.06346_example.png +0 -0
  286. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/2502.19478_example.png +0 -0
  287. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/example_grid.png +0 -0
  288. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/example_output/Add_info_log10_f_peak_Hz.png +0 -0
  289. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/example_output/Add_info_log10_h2OmegaGW_peak.png +0 -0
  290. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/example_output/SNR_BBO.png +0 -0
  291. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/example_output/SNR_DECIGO.png +0 -0
  292. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/example_output/SNR_ET.png +0 -0
  293. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/example_output/lin_plot_c_s_bro.png +0 -0
  294. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/example_output/lin_plot_c_s_sym.png +0 -0
  295. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/example_output/lin_plot_g_eff_tot_reh.png +0 -0
  296. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/example_output/lin_plot_xi_crit.png +0 -0
  297. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/example_output/log_plot_Tcrit_SM_GeV.png +0 -0
  298. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/example_output/log_plot_Tf_SM_GeV.png +0 -0
  299. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/example_output/log_plot_Tnuc_SM_GeV.png +0 -0
  300. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/example_output/log_plot_Tperc_SM_GeV.png +0 -0
  301. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/example_output/log_plot_Treh_SM_GeV.png +0 -0
  302. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/example_output/log_plot_alpha.png +0 -0
  303. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/_static/example_output/log_plot_betaH_RH.png +0 -0
  304. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/api/TransitionListener.rst +0 -0
  305. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/changelog.md +0 -0
  306. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/docs/source/contributing.rst +0 -0
  307. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/examples/bp_et.yaml +0 -0
  308. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/examples/bp_muares.yaml +0 -0
  309. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/examples/bp_pta.yaml +0 -0
  310. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/examples/example_dark_photon.yaml +0 -0
  311. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/examples/example_grid.yaml +0 -0
  312. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/examples/example_line.yaml +0 -0
  313. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/examples/example_point.yaml +0 -0
  314. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/examples/example_random_conformal.yaml +0 -0
  315. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/examples/example_ultranest.yaml +0 -0
  316. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/models/TL_2HDM_BSMPT_highacc.py +0 -0
  317. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/interface/check.py +0 -0
  318. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/logo/TL-logo_small.png +0 -0
  319. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/tab_data/HLV-O2-PLI.csv +0 -0
  320. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/tab_data/HLV-O2-noise.csv +0 -0
  321. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/tab_data/HLVK-design-PLI.csv +0 -0
  322. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/tab_data/HLVK-design-noise.csv +0 -0
  323. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/tab_data/NG15_PLI_hc.csv +0 -0
  324. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/tab_data/NG15_noise_hc.csv +0 -0
  325. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/tab_data/PLI-dataset.csv +0 -0
  326. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/tab_data/energydensities.dat +0 -0
  327. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/tab_data/finiteT_b.dat.txt +0 -0
  328. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/tab_data/finiteT_f.dat.txt +0 -0
  329. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/tab_data/geff_SM.dat +0 -0
  330. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/tab_data/muAres_f_Hz_PLI_h2OmegaGW.csv +0 -0
  331. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/tab_data/muAres_f_Hz_h2Omega_noise.csv +0 -0
  332. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/tab_data/noise-dataset.csv +0 -0
  333. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/tab_data/numberdensities.dat +0 -0
  334. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/src/transitionlistener/tab_data/pressures.dat +0 -0
  335. {transitionlistener-2.1.0/src/transitionlistener/tab_data/30f_fs{hd}_100fDMGP_ceffyl → transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_dmgp_v1}/bandwidths.npy +0 -0
  336. {transitionlistener-2.1.0/src/transitionlistener/tab_data/30f_fs{hd}_100fDMGP_ceffyl → transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_dmgp_v1}/density.npy +0 -0
  337. {transitionlistener-2.1.0/src/transitionlistener/tab_data/30f_fs{hd}_100fDMGP_ceffyl → transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_dmgp_v1}/log.txt +0 -0
  338. {transitionlistener-2.1.0/src/transitionlistener/tab_data/30f_fs{hd}_100fDMGP_ceffyl → transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_dmgp_v1}/log10rhogrid.npy +0 -0
  339. {transitionlistener-2.1.0/src/transitionlistener/tab_data/30f_fs{hd}_100fDMGP_ceffyl → transitionlistener-2.2.0/src/transitionlistener/tab_data/pta_free_spectra/ng15_hd_dmgp_v1}/log10rholabels.txt +0 -0
  340. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/tests/__init__.py +0 -0
  341. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/tests/check_installation.py +0 -0
  342. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/tests/run_tl_without_interface.py +0 -0
  343. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/tests/test_bubbledynamics_adaptive_rebuild.py +0 -0
  344. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/tests/test_bubbledynamics_mainline_refined.py +0 -0
  345. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/tests/test_hydrodynamics.py +0 -0
  346. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/tests/test_mock_rate_peak_refinement.py +0 -0
  347. {transitionlistener-2.1.0 → transitionlistener-2.2.0}/tests/test_thermodynamics.py +0 -0
@@ -0,0 +1,109 @@
1
+ # Instructions for code review
2
+
3
+ TransitionListener computes the thermodynamics, percolation and gravitational wave spectrum of a
4
+ cosmological first-order phase transition. Physics correctness and reproducibility matter more
5
+ than style.
6
+
7
+ ## What this repository looks like
8
+
9
+ There are **two percolation solvers with parallel implementations**, and a function often exists
10
+ twice under the same name:
11
+
12
+ | adaptive step size | fixed step size |
13
+ |---|---|
14
+ | `bubbledynamics.py` | `bubbledynamics_fixedstep.py` |
15
+ | `transitionObservables.py` | `transitionObservables_fixedstep.py` |
16
+ | `percolation_adaptivestepsize.py` | `percolation_fixedstepsize.py` |
17
+
18
+ `_build_percolation_settings`, `percIntegral`, `calc_betaH_S3`, `logGamma`, `h_eff_DS`,
19
+ `calcSoundSpeedSq` and `h_eff_coupled_radiation` all exist in both trees. A module in the
20
+ fixed-step family *usually* imports from the fixed-step copy, but not always: for example
21
+ `transitionObservables_fixedstep.py` takes `falseVacuumVolumeGrowthRate` and
22
+ `integrate_broken_temperature` from the adaptive `bubbledynamics`. Check the import, do not assume
23
+ it from the file name. A change to one copy does not reach the other, and a guard added to the
24
+ wrong copy is dead code on the path it was meant to protect. **This is the most valuable thing to check in any diff**: when a function
25
+ is changed, say whether its twin needs the same change, and whether the entry point a real run
26
+ takes reaches the copy that was edited.
27
+
28
+ ## Things that are deliberate, not defects
29
+
30
+ - **`transitionObservables_fixedstep.py` is usually left unchanged.** The two solvers are to be
31
+ brought onto one implementation in a change of its own. A pull request that changes only the
32
+ adaptive solver and says so is doing the right thing; it is not an oversight.
33
+ - **A new setting that only the adaptive solver implements raises for the fixed-step solver.**
34
+ That is the intended behaviour, not a missing feature.
35
+ - **Diagnostics are written apart from the observables**, under a `Diagnostics:` heading in
36
+ `1_All_params.txt`. This keeps two runs of one point byte-comparable in the observables block;
37
+ the wall clock would otherwise break that. Do not suggest merging the two blocks.
38
+ - **`gen_mirror_phases` and `integral_method = "double_integral"` are non-default paths.** Changes
39
+ confined to them do not affect published results, and the pull request will say so.
40
+
41
+ ## What is worth flagging
42
+
43
+ In rough order of how often it has been the actual defect here:
44
+
45
+ 1. **A change to one of a pair of twin functions**, with no statement about the other, or a guard
46
+ placed in the copy the executing path does not call.
47
+ 2. **A new output key that is not registered where registration is required.** Two places are
48
+ mandatory: `config.all_observables`, or the writer never sees the key, and
49
+ `interface/samplers.py: get_empty_result()`, or failed scan points produce rows that do not
50
+ line up with successful ones. `interface/output_schema.py` is **not** mandatory:
51
+ `_build_column_order()` appends every configured derived key absent from
52
+ `DERIVED_PREFERRED_ORDER`, and then any remaining row key, so a key without an entry there is
53
+ still written, just at the end. Add one only to place a column deliberately. Seventeen of the
54
+ forty-six observables have no entry, including every `WARNING:` and `DIAG:` key, so do not
55
+ report a missing one as a defect.
56
+ 3. **Error and exit paths that skip bookkeeping the success path does**: a cache entry removed and
57
+ not restored, a diagnostic carried on an exception and never recorded, a runtime recorded on
58
+ one branch only.
59
+ 4. **`except Exception` swallowing the run's own timeout.** `errors.Timeout` subclasses
60
+ `Exception` and is raised from a signal handler, so it can fire anywhere. It must be re-raised;
61
+ only genuine solver failures may be absorbed.
62
+ 5. **Reusing a cached action.** `calcAction(pot, T, ..., outdict)` returns `outdict[T]["action"]`
63
+ when present, so any recomputation at higher precision silently returns the old value unless
64
+ the entry is removed first.
65
+ 6. **A tolerance that loosens a stricter setting**, or a cap sized for a different stencil. Taking
66
+ `min` is right; assignment is not.
67
+ 7. **Counters that report what was planned rather than what happened**, and pairs of booleans that
68
+ can be read as contradicting each other.
69
+ 8. **Claims in prose that the code does not support.** Docstrings, `CHANGELOG.md` entries and
70
+ numbers quoted in the pull request body are part of the change. A number measured before other
71
+ work landed may be stale.
72
+ 9. **A comparison a special float walks through.** Every comparison against `nan` is false, so
73
+ `if error > tol: reject` accepts a `nan`, the input it most needs to reject; and `+inf`
74
+ satisfies `value > 0`, so a positivity test alone accepts an infinite result. `np.argmax` and
75
+ `np.argmin` return the position of a `nan` rather than skipping it, so a selection by largest
76
+ or smallest can pick the non-finite entry and make every later comparison `nan`. Three
77
+ instances of this one class reached review in October 2026, in the same two files. Ask of any
78
+ new guard what it does when handed `nan`, `+inf`, `-inf` and zero, and flag the ones where the
79
+ answer is "accepts". The shape that does not have this failure is a refused comparison,
80
+ `if not (value <= tol)`, or an explicit `np.isfinite` first; and a mask to the finite entries
81
+ before any `argmax`/`argmin` over measured values, with its own exit when none is finite.
82
+
83
+ ## Reviewing the tests
84
+
85
+ A test that passes is not evidence until it has been shown to fail without the fix. Flag a test
86
+ that cannot fail:
87
+
88
+ - it never reaches the new code path, because an earlier branch returns first;
89
+ - its synthetic perturbation is smaller than the threshold it is meant to cross;
90
+ - it injects a failure before the state under test is reached;
91
+ - its fixture is so minimal that a guard short-circuits (a bare `object()` where a potential is
92
+ expected, so the real code raises and the assertion tests the fallback instead).
93
+
94
+ ## Conventions
95
+
96
+ - Commit messages are one line, in the imperative, with no trailers.
97
+ - Pull request bodies are self-contained: no local paths, no references to unpushed branches.
98
+ - Numbers in a pull request body are measurements. If one cannot be reproduced it should be
99
+ removed rather than softened.
100
+ - The full test suite must pass. Failures in `tests/test_release_smoke.py` usually mean the `tl`
101
+ console script was not on `PATH`: its fallback invokes `transitionlistener.interface.cli` as a
102
+ module, and that file has no `__main__` guard, so the subprocess does nothing and the fixture
103
+ reports a missing output table. That is an environment problem, not a defect in the change.
104
+
105
+ ## Please do not
106
+
107
+ - Re-report a finding that a later commit on the branch already fixes; check the current head.
108
+ - Ask for the two solvers to be unified as part of an unrelated change.
109
+ - Ask for a wall clock or other diagnostic to be moved in beside the physics observables.
@@ -51,3 +51,6 @@ arxiv/*.run.xml
51
51
  arxiv/*.synctex.gz
52
52
  arxiv/*.toc
53
53
  arxiv/main.pdf
54
+
55
+ # Local test-suite and batch-job logs
56
+ suite_logs/
@@ -0,0 +1,19 @@
1
+ # Notes for coding agents
2
+
3
+ The review brief for this repository lives in `.github/copilot-instructions.md`. Read it before
4
+ reviewing or changing anything. It is written for automated code review but applies to any agent
5
+ working here: it describes the parallel adaptive / fixed-step solver modules, which duplications
6
+ are deliberate, where a new output key has to be registered, and the defect classes that recur.
7
+
8
+ Two points from it are worth repeating, because they are the ones most often missed:
9
+
10
+ - **Many functions exist twice**, once in the adaptive module and once in its `_fixedstep` twin.
11
+ Changing one copy does not reach the other, and a guard added to the copy the executing path
12
+ does not call is dead code. Before finishing any change, list the symbols it touches and grep
13
+ the source tree for each of them.
14
+ - **A passing test is not evidence.** Revert the change and confirm the test fails before
15
+ claiming it covers anything.
16
+
17
+ Run the test suite with the source tree on the path, not the editable install:
18
+
19
+ PYTHONPATH=$PWD/src python -m pytest -q -p no:cacheprovider tests