TransitionListener 2.0.0__tar.gz → 2.0.1__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 (153) hide show
  1. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/.gitignore +4 -0
  2. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/PKG-INFO +1 -1
  3. transitionlistener-2.0.1/conda/meta.yaml +60 -0
  4. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/pyproject.toml +1 -1
  5. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/interface/pipeline.py +5 -3
  6. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/interface/state.py +2 -1
  7. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/.github/workflows/ci.yml +0 -0
  8. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/.github/workflows/docs.yml +0 -0
  9. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/CHANGELOG.md +0 -0
  10. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/CITATION.cff +0 -0
  11. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/LICENSE.txt +0 -0
  12. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/README.md +0 -0
  13. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/Makefile +0 -0
  14. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/2109.06208_example.png +0 -0
  15. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/2311.06346_example.png +0 -0
  16. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/2502.19478_example.png +0 -0
  17. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/TL-logo_large.png +0 -0
  18. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_grid.png +0 -0
  19. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_kappa.png +0 -0
  20. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_output/Add_info_log10_f_peak_Hz.png +0 -0
  21. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_output/Add_info_log10_h2OmegaGW_peak.png +0 -0
  22. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_output/SNR_BBO.png +0 -0
  23. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_output/SNR_DECIGO.png +0 -0
  24. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_output/SNR_ET.png +0 -0
  25. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_output/fig14_alpha_betaH.png +0 -0
  26. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_output/lin_plot_c_s_bro.png +0 -0
  27. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_output/lin_plot_c_s_sym.png +0 -0
  28. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_output/lin_plot_g_eff_tot_reh.png +0 -0
  29. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_output/lin_plot_xi_crit.png +0 -0
  30. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_output/log_plot_Tcrit_SM_GeV.png +0 -0
  31. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_output/log_plot_Tf_SM_GeV.png +0 -0
  32. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_output/log_plot_Tnuc_SM_GeV.png +0 -0
  33. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_output/log_plot_Tperc_SM_GeV.png +0 -0
  34. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_output/log_plot_Treh_SM_GeV.png +0 -0
  35. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_output/log_plot_alpha.png +0 -0
  36. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_output/log_plot_betaH_RH.png +0 -0
  37. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/example_point_GW_spectrum.png +0 -0
  38. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/_static/pipeline.png +0 -0
  39. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/api/TransitionListener.rst +0 -0
  40. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/changelog.md +0 -0
  41. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/conf.py +0 -0
  42. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/contributing.rst +0 -0
  43. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/documentation.rst +0 -0
  44. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/example_output.md +0 -0
  45. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/faq.rst +0 -0
  46. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/features.rst +0 -0
  47. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/getting_started.rst +0 -0
  48. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/index.rst +0 -0
  49. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/installation.rst +0 -0
  50. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/method.rst +0 -0
  51. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/plots.rst +0 -0
  52. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/docs/source/usage.rst +0 -0
  53. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/examples/bp_et.yaml +0 -0
  54. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/examples/bp_lisa.yaml +0 -0
  55. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/examples/bp_muares.yaml +0 -0
  56. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/examples/bp_pta.yaml +0 -0
  57. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/examples/example_dark_photon.yaml +0 -0
  58. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/examples/example_grid.yaml +0 -0
  59. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/examples/example_line.yaml +0 -0
  60. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/examples/example_point.yaml +0 -0
  61. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/examples/example_random_conformal.yaml +0 -0
  62. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/examples/example_ultranest.yaml +0 -0
  63. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/models/TL_2HDM.py +0 -0
  64. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/models/TL_conformal_dark_u1.py +0 -0
  65. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/models/TL_dark_U1.py +0 -0
  66. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/models/TL_dark_U1_g_parameterization.py +0 -0
  67. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/models/TL_dark_flipflop.py +0 -0
  68. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/models/templatePotential.py +0 -0
  69. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/__init__.py +0 -0
  70. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/bubbledynamics.py +0 -0
  71. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/bubbledynamics_fixedstep.py +0 -0
  72. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/ckm.py +0 -0
  73. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/colors.py +0 -0
  74. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/config.py +0 -0
  75. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/constants.py +0 -0
  76. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/counterterms/__init__.py +0 -0
  77. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/counterterms/cw.py +0 -0
  78. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/counterterms/tensors.py +0 -0
  79. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/counterterms/twohdm.py +0 -0
  80. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/counterterms/twohdm_solver.py +0 -0
  81. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/errors.py +0 -0
  82. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/finiteT.py +0 -0
  83. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/generic_potential.py +0 -0
  84. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/gridplots.py +0 -0
  85. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/gwfopt.py +0 -0
  86. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/helper_functions.py +0 -0
  87. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/hydrodynamics.py +0 -0
  88. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/interface/__init__.py +0 -0
  89. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/interface/check.py +0 -0
  90. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/interface/cli.py +0 -0
  91. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/interface/config_loader.py +0 -0
  92. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/interface/logging_utils.py +0 -0
  93. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/interface/output_schema.py +0 -0
  94. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/interface/samplers.py +0 -0
  95. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/interface/scans.py +0 -0
  96. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/interface/single_point.py +0 -0
  97. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/lineplots.py +0 -0
  98. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/logo/TL-logo_large.png +0 -0
  99. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/logo/TL-logo_small.png +0 -0
  100. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/nucleation.py +0 -0
  101. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/observability.py +0 -0
  102. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/particles.py +0 -0
  103. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/pathDeformation.py +0 -0
  104. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/percolation_adaptive_gridbuilders.py +0 -0
  105. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/percolation_adaptive_rate.py +0 -0
  106. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/percolation_adaptivestepsize.py +0 -0
  107. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/percolation_fixedstepsize.py +0 -0
  108. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/phases.py +0 -0
  109. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/plot_settings.py +0 -0
  110. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/plots.py +0 -0
  111. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/runtime_options.py +0 -0
  112. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/30f_fs{hd}_100fDMGP_ceffyl/bandwidths.npy +0 -0
  113. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/30f_fs{hd}_100fDMGP_ceffyl/density.npy +0 -0
  114. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/30f_fs{hd}_100fDMGP_ceffyl/freqs.npy +0 -0
  115. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/30f_fs{hd}_100fDMGP_ceffyl/log.txt +0 -0
  116. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/30f_fs{hd}_100fDMGP_ceffyl/log10rhogrid.npy +0 -0
  117. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/30f_fs{hd}_100fDMGP_ceffyl/log10rholabels.txt +0 -0
  118. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/30f_fs{hd}_100fDMGP_ceffyl/pulsar_list.txt +0 -0
  119. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/HLV-O2-PLI.csv +0 -0
  120. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/HLV-O2-noise.csv +0 -0
  121. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/HLVK-design-PLI.csv +0 -0
  122. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/HLVK-design-noise.csv +0 -0
  123. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/NG15_PLI_hc.csv +0 -0
  124. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/NG15_noise_hc.csv +0 -0
  125. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/PLI-dataset.csv +0 -0
  126. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/energydensities.dat +0 -0
  127. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/finiteT_b.dat.txt +0 -0
  128. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/finiteT_f.dat.txt +0 -0
  129. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/geff_SM.dat +0 -0
  130. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/muAres_f_Hz_PLI_h2OmegaGW.csv +0 -0
  131. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/muAres_f_Hz_h2Omega_noise.csv +0 -0
  132. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/noise-dataset.csv +0 -0
  133. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/numberdensities.dat +0 -0
  134. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tab_data/pressures.dat +0 -0
  135. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/thermodynamics.py +0 -0
  136. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/transitionObservables.py +0 -0
  137. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/transitionObservables_fixedstep.py +0 -0
  138. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/transitions.py +0 -0
  139. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/src/transitionlistener/tunneling1D.py +0 -0
  140. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/tests/__init__.py +0 -0
  141. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/tests/check_installation.py +0 -0
  142. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/tests/run_tl_without_interface.py +0 -0
  143. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/tests/test_1d_tunneling.py +0 -0
  144. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/tests/test_bubbledynamics_adaptive_rebuild.py +0 -0
  145. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/tests/test_bubbledynamics_calcaction_cache.py +0 -0
  146. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/tests/test_bubbledynamics_mainline_refined.py +0 -0
  147. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/tests/test_hydrodynamics.py +0 -0
  148. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/tests/test_mock_rate_peak_refinement.py +0 -0
  149. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/tests/test_paper_benchmark_common.py +0 -0
  150. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/tests/test_percintegral_ode.py +0 -0
  151. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/tests/test_release_smoke.py +0 -0
  152. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/tests/test_thermodynamics.py +0 -0
  153. {transitionlistener-2.0.0 → transitionlistener-2.0.1}/tests/test_warning_outputs.py +0 -0
@@ -9,6 +9,10 @@ __pycache__/
9
9
  **/__pycache__/
10
10
  *.egg-info/
11
11
 
12
+ # Build and distribution artefacts
13
+ dist/
14
+ build/
15
+
12
16
  # Auto-generated model artefacts (counterterm tensors, etc.)
13
17
  models/generated/
14
18
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: TransitionListener
3
- Version: 2.0.0
3
+ Version: 2.0.1
4
4
  Summary: Framework for analyzing cosmological first-order phase transitions and their gravitational wave signatures.
5
5
  Project-URL: Homepage, https://tasillo.de/TransitionListener/
6
6
  Project-URL: Documentation, https://tasillo.de/TransitionListener/
@@ -0,0 +1,60 @@
1
+ {% set version = "2.0.1" %}
2
+ {% set python_min = "3.10" %}
3
+
4
+ package:
5
+ name: transitionlistener
6
+ version: {{ version }}
7
+
8
+ source:
9
+ url: https://pypi.org/packages/source/T/TransitionListener/transitionlistener-{{ version }}.tar.gz
10
+ sha256: 1c3a16edbb9eafc0e9878cff6dfc1798bb47278a51ba659b2ab8f41406d0fe27
11
+
12
+ build:
13
+ entry_points:
14
+ - tl = transitionlistener.interface:main
15
+ noarch: python
16
+ script: {{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation
17
+ number: 0
18
+
19
+ requirements:
20
+ host:
21
+ - python {{ python_min }}
22
+ - hatchling
23
+ - pip
24
+ run:
25
+ - python >={{ python_min }}
26
+ - pillow
27
+ - pyyaml
28
+ - corner
29
+ - cycler
30
+ - getdist
31
+ - h5py
32
+ - matplotlib-base
33
+ - mpi4py
34
+ - numpy >=1.21
35
+ - pandas
36
+ - rich
37
+ - scipy
38
+ - tqdm
39
+ - ultranest
40
+
41
+ test:
42
+ imports:
43
+ - transitionlistener
44
+ commands:
45
+ - pip check
46
+ - tl --help
47
+ requires:
48
+ - pip
49
+ - python {{ python_min }}
50
+
51
+ about:
52
+ home: https://tasillo.de/TransitionListener/
53
+ summary: Framework for analyzing cosmological first-order phase transitions and their gravitational wave signatures.
54
+ doc_url: https://tasillo.de/TransitionListener/
55
+ license: GPL-3.0-only
56
+ license_file: LICENSE.txt
57
+
58
+ extra:
59
+ recipe-maintainers:
60
+ - tasicarl
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "TransitionListener"
7
- version = "2.0.0"
7
+ version = "2.0.1"
8
8
  description = "Framework for analyzing cosmological first-order phase transitions and their gravitational wave signatures."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -127,7 +127,7 @@ def _compute_single_point(
127
127
  else:
128
128
  astroparams_dict = {"A": 0, "gamma": 0}
129
129
 
130
- if timeout > 0 and not state.DEBUGMODE:
130
+ if timeout > 0 and not state.DEBUGMODE and hasattr(signal, "alarm"):
131
131
  signal.alarm(timeout)
132
132
  try:
133
133
  context["pot"] = potential(inputparams_dict, verbose=verbose)
@@ -172,10 +172,12 @@ def _compute_single_point(
172
172
  if verbose:
173
173
  print(f"Skipping GW observability after transition observables: {err}")
174
174
 
175
- signal.alarm(0)
175
+ if hasattr(signal, "alarm"):
176
+ signal.alarm(0)
176
177
  return context, None
177
178
  except Exception as err:
178
- signal.alarm(0)
179
+ if hasattr(signal, "alarm"):
180
+ signal.alarm(0)
179
181
  if state.DEBUGMODE:
180
182
  raise
181
183
  return context, err
@@ -58,4 +58,5 @@ def timeout_handler(signum, frame): # pragma: no cover - deterministic signal h
58
58
  msg = f"The calculation timed out after {TIMEOUT} seconds."
59
59
  raise Timeout(msg)
60
60
 
61
- signal.signal(signal.SIGALRM, timeout_handler)
61
+ if hasattr(signal, "SIGALRM"): # POSIX only — not available on Windows
62
+ signal.signal(signal.SIGALRM, timeout_handler)