ABCMB 0.1.2__tar.gz → 0.2.2__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 (149) hide show
  1. {abcmb-0.1.2 → abcmb-0.2.2}/ABCMB.egg-info/PKG-INFO +30 -6
  2. {abcmb-0.1.2 → abcmb-0.2.2}/ABCMB.egg-info/SOURCES.txt +1 -0
  3. {abcmb-0.1.2 → abcmb-0.2.2}/ABCMB.egg-info/requires.txt +1 -0
  4. abcmb-0.2.2/LICENSE +21 -0
  5. {abcmb-0.1.2 → abcmb-0.2.2}/PKG-INFO +30 -6
  6. {abcmb-0.1.2 → abcmb-0.2.2}/README.md +26 -5
  7. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/ABCMBTools.py +10 -10
  8. abcmb-0.2.2/abcmb/__init__.py +7 -0
  9. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/background.py +16 -15
  10. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/main.py +100 -52
  11. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/model_specs.py +14 -18
  12. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/perturbations.py +3 -3
  13. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/species.py +28 -17
  14. abcmb-0.2.2/abcmb/version.py +1 -0
  15. {abcmb-0.1.2 → abcmb-0.2.2}/setup.cfg +1 -0
  16. abcmb-0.1.2/abcmb/__init__.py +0 -9
  17. abcmb-0.1.2/abcmb/version.py +0 -1
  18. {abcmb-0.1.2 → abcmb-0.2.2}/ABCMB.egg-info/dependency_links.txt +0 -0
  19. {abcmb-0.1.2 → abcmb-0.2.2}/ABCMB.egg-info/top_level.txt +0 -0
  20. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/bessel_tab/l.txt +0 -0
  21. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/bessel_tab/phi0.txt +0 -0
  22. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/bessel_tab/phi1.txt +0 -0
  23. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/bessel_tab/phi2.txt +0 -0
  24. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/bessel_tab/xphi0.txt +0 -0
  25. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/bessel_tab/xphi1.txt +0 -0
  26. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/bessel_tab/xphi2.txt +0 -0
  27. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/constants.py +0 -0
  28. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/hyrex/__init__.py +0 -0
  29. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/hyrex/array_with_padding.py +0 -0
  30. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/hyrex/helium.py +0 -0
  31. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/hyrex/hydrogen.py +0 -0
  32. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/hyrex/hyrex.py +0 -0
  33. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/hyrex/recomb_functions.py +0 -0
  34. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/hyrex/tabs/Alpha_inf.dat +0 -0
  35. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/hyrex/tabs/R_inf.dat +0 -0
  36. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/hyrex/tabs/fit_swift.dat +0 -0
  37. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/hyrex/tabs/two_photon_tables.dat +0 -0
  38. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/hyrex/tabs/two_photon_tables_hires.dat +0 -0
  39. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/__init__.py +0 -0
  40. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/abundances.py +0 -0
  41. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/background.py +0 -0
  42. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/const.py +0 -0
  43. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/__init__.py +0 -0
  44. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/background/QED_P_int.txt +0 -0
  45. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/background/QED_d2P_intdT2.txt +0 -0
  46. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/background/QED_dP_intdT.txt +0 -0
  47. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/background/nue_ann.txt +0 -0
  48. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/background/nue_scatt.txt +0 -0
  49. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/background/numu_ann.txt +0 -0
  50. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/background/numu_scatt.txt +0 -0
  51. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/__init__.py +0 -0
  52. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PArthENoPE.py +0 -0
  53. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2018/Be7nLi7p.txt +0 -0
  54. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2018/He3aBe7g.txt +0 -0
  55. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2018/He3dap.txt +0 -0
  56. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2018/He3ntp.txt +0 -0
  57. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2018/Li7paa.txt +0 -0
  58. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2018/ddHe3n.txt +0 -0
  59. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2018/ddtp.txt +0 -0
  60. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2018/dpHe3g.txt +0 -0
  61. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2018/npdg.txt +0 -0
  62. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2018/taLi7g.txt +0 -0
  63. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2018/tdan.txt +0 -0
  64. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2018/tpag.txt +0 -0
  65. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2023/Be7nLi7p.txt +0 -0
  66. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2023/He3aBe7g.txt +0 -0
  67. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2023/He3dap.txt +0 -0
  68. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2023/He3ntp.txt +0 -0
  69. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2023/Li7paa.txt +0 -0
  70. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2023/ddHe3n.txt +0 -0
  71. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2023/ddtp.txt +0 -0
  72. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2023/dpHe3g.txt +0 -0
  73. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2023/npdg.txt +0 -0
  74. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2023/taLi7g.txt +0 -0
  75. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2023/tdan.txt +0 -0
  76. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_PRIMAT_2023/tpag.txt +0 -0
  77. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_YOF/Be7nLi7p.txt +0 -0
  78. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_YOF/He3aBe7g.txt +0 -0
  79. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_YOF/He3dap.txt +0 -0
  80. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_YOF/He3ntp.txt +0 -0
  81. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_YOF/Li7paa.txt +0 -0
  82. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_YOF/ddHe3n.txt +0 -0
  83. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_YOF/ddtp.txt +0 -0
  84. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_YOF/dpHe3g.txt +0 -0
  85. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_YOF/npdg.txt +0 -0
  86. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_YOF/taLi7g.txt +0 -0
  87. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_YOF/tdan.txt +0 -0
  88. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/key_YOF/tpag.txt +0 -0
  89. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/B8dBe7He3.txt +0 -0
  90. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/B8nBe7d.txt +0 -0
  91. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/B8nLi6He3.txt +0 -0
  92. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/B8naap.txt +0 -0
  93. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/B8tBe7a.txt +0 -0
  94. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/B8taaHe3.txt +0 -0
  95. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Be7He3ppaa.txt +0 -0
  96. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Be7daap.txt +0 -0
  97. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Be7naa.txt +0 -0
  98. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Be7pB8g.txt +0 -0
  99. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Be7tLi6a.txt +0 -0
  100. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Be7tLi7He3.txt +0 -0
  101. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Be7taad.txt +0 -0
  102. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Be7taanp.txt +0 -0
  103. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/He3He3app.txt +0 -0
  104. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/He3nag.txt +0 -0
  105. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/He3tLi6g.txt +0 -0
  106. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/He3tad.txt +0 -0
  107. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/He3tanp.txt +0 -0
  108. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li6He3Be7d.txt +0 -0
  109. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li6He3aap.txt +0 -0
  110. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li6dBe7n.txt +0 -0
  111. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li6dLi7p.txt +0 -0
  112. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li6nLi7g.txt +0 -0
  113. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li6nta.txt +0 -0
  114. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li6pBe7g.txt +0 -0
  115. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li6pHe3a.txt +0 -0
  116. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li6tLi7d.txt +0 -0
  117. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li6tLi8p.txt +0 -0
  118. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li6taan.txt +0 -0
  119. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li7He3Li6a.txt +0 -0
  120. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li7He3aad.txt +0 -0
  121. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li7He3aanp.txt +0 -0
  122. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li7dLi8p.txt +0 -0
  123. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li7daan.txt +0 -0
  124. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li7nLi8g.txt +0 -0
  125. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li7paag.txt +0 -0
  126. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li7taann.txt +0 -0
  127. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li8He3Li7a.txt +0 -0
  128. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li8He3aat.txt +0 -0
  129. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li8dLi7t.txt +0 -0
  130. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/Li8paan.txt +0 -0
  131. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/annHe6g.txt +0 -0
  132. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/anpLi6g.txt +0 -0
  133. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/daLi6g.txt +0 -0
  134. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/ddag.txt +0 -0
  135. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/dntg.txt +0 -0
  136. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/ppndp.txt +0 -0
  137. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/nuclear_rates/other_PRIMAT_2023/ttann.txt +0 -0
  138. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/weak_thermal_corrections/nTOp_thermal_corrections_SBBN.txt +0 -0
  139. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/data/weak_thermal_corrections/pTOn_thermal_corrections_SBBN.txt +0 -0
  140. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/nuclear.py +0 -0
  141. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/reactions.py +0 -0
  142. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/special_funcs.py +0 -0
  143. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/thermo.py +0 -0
  144. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/linx/weak_rates.py +0 -0
  145. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/sBBN_2025_CLASS.txt +0 -0
  146. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/setup.py +0 -0
  147. {abcmb-0.1.2 → abcmb-0.2.2}/abcmb/spectrum.py +0 -0
  148. {abcmb-0.1.2 → abcmb-0.2.2}/pyproject.toml +0 -0
  149. {abcmb-0.1.2 → abcmb-0.2.2}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ABCMB
3
- Version: 0.1.2
3
+ Version: 0.2.2
4
4
  Summary: A fast, differentiable, and extensible CMB code
5
5
  Home-page: https://github.com/TonyZhou729/ABCMB
6
6
  Author: Zilu Zhou, Cara Giovanetti, Hongwan Liu
@@ -19,6 +19,7 @@ Classifier: Programming Language :: Python :: 3.13
19
19
  Classifier: Programming Language :: Python :: 3.14
20
20
  Requires-Python: >=3.8
21
21
  Description-Content-Type: text/markdown
22
+ License-File: LICENSE
22
23
  Requires-Dist: numpy
23
24
  Requires-Dist: scipy
24
25
  Requires-Dist: matplotlib
@@ -27,6 +28,8 @@ Requires-Dist: equinox==0.13.2
27
28
  Requires-Dist: interpax
28
29
  Requires-Dist: jax==0.8.1
29
30
  Requires-Dist: pytest
31
+ Requires-Dist: optimistix==0.0.11
32
+ Dynamic: license-file
30
33
 
31
34
  <h1 align="center">
32
35
  ABCMB<!-- omit from toc -->
@@ -34,6 +37,7 @@ ABCMB<!-- omit from toc -->
34
37
  <h4 align="center">
35
38
 
36
39
  [![License: MIT](https://img.shields.io/badge/License-MIT-red.svg)](https://opensource.org/licenses/MIT)
40
+ [![arXiv](https://img.shields.io/badge/arXiv-2602.15104%20-green.svg)](https://arxiv.org/abs/2602.15104)
37
41
  [![Run Tests](https://github.com/TonyZhou729/ABCMB/actions/workflows/accuracy.yml/badge.svg)](https://github.com/TonyZhou729/ABCMB/actions/workflows/accuracy.yml)
38
42
  <!--[![arXiv](https://img.shields.io/badge/arXiv-2408.14538%20-green.svg)](https://arxiv.org/abs/2408.14538) -->
39
43
 
@@ -42,14 +46,19 @@ ABCMB<!-- omit from toc -->
42
46
  Autodifferentiable Boltzmann solver for the CMB (ABCMB) is a Python+JAX package for differentiable computation of the Cosmic Microwave Background. ABCMB is **complete to linear order** in $\Lambda\rm{CDM}$ cosmology. It computes the matter and CMB power spectra and includes effects like lensing, massive neutrinos, and a state-of-the-art treatment of the physics of recombination through the companion code [HyRex](https://github.com/TonyZhou729/HyRex).
43
47
 
44
48
  ## Installation
45
- We recommend installing ABCMB in a clean conda environment. After downloading and unpacking the code, in the code directory run
49
+ ABCMB is pip installable! Just run
46
50
  ```
47
- conda create -n ABCMB
48
- conda activate ABCMB
49
- pip install -U -r requirements.txt
51
+ pip install ABCMB
52
+ ```
53
+ We recommend always doing so in a conda environment, preferably even a clean one.
50
54
 
55
+ If you'd like to clone the repo instead, after cloning you can run
56
+ ```
57
+ pip install .
51
58
  ```
52
- optionally specifying your preferred python version after the environment name. Note that this will automatically attempt to install JAX for CPU; to install for GPU, refer to the [JAX documentation](https://docs.jax.dev/en/latest/installation.html) for a quick JAX installation guide.
59
+ from the code directory.
60
+
61
+ Note that both methods of installing will automatically attempt to install JAX for CPU; to install for GPU, refer to the [JAX documentation](https://docs.jax.dev/en/latest/installation.html) for a quick JAX installation guide.
53
62
 
54
63
  ## Examples
55
64
  We have included several pedagogical jupyter notebooks to walk you through how to get started with ABCMB in our [example_notebooks](https://github.com/TonyZhou729/ABCMB/tree/main/example_notebooks) folder. We suggest you start with [ABCMB_basics](https://github.com/TonyZhou729/ABCMB/blob/main/example_notebooks/ABCMB_basics.ipynb) to get a sense of how to run the code. If you'd like to add new physics to ABCMB, check out [ABCMB_Fluids](https://github.com/TonyZhou729/ABCMB/blob/main/example_notebooks/ABCMB_Fluids.ipynb). If you'd like to run ABCMB with the Big Bang Nucleosynthesis (BBN) code [LINX](https://github.com/cgiovanetti/LINX/tree/main) to do BBN+CMB joint analyses, check out [ABCMB_with_LINX](https://github.com/TonyZhou729/ABCMB/blob/main/example_notebooks/ABCMB_with_LINX.ipynb).
@@ -57,5 +66,20 @@ We have included several pedagogical jupyter notebooks to walk you through how t
57
66
  ## Issues
58
67
  Please feel free to open an issue if something is amiss in ABCMB!
59
68
 
69
+ ## Citation
70
+
71
+ If you use ABCMB to publish scientific research, we suggest you cite
72
+ ```
73
+ @misc{abcmb,
74
+ title={{ABCMB: A Python+JAX Package for the Cosmic Microwave Background Power Spectrum}},
75
+ author={Zilu Zhou and Cara Giovanetti and Hongwan Liu},
76
+ year={2026},
77
+ eprint={2602.15104},
78
+ archivePrefix={arXiv},
79
+ primaryClass={astro-ph.CO},
80
+ url={https://arxiv.org/abs/2602.15104},
81
+ }
82
+ ```
83
+
60
84
 
61
85
 
@@ -1,3 +1,4 @@
1
+ LICENSE
1
2
  README.md
2
3
  pyproject.toml
3
4
  setup.cfg
@@ -6,3 +6,4 @@ equinox==0.13.2
6
6
  interpax
7
7
  jax==0.8.1
8
8
  pytest
9
+ optimistix==0.0.11
abcmb-0.2.2/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Zilu Zhou, Cara Giovanetti, Hongwan Liu
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ABCMB
3
- Version: 0.1.2
3
+ Version: 0.2.2
4
4
  Summary: A fast, differentiable, and extensible CMB code
5
5
  Home-page: https://github.com/TonyZhou729/ABCMB
6
6
  Author: Zilu Zhou, Cara Giovanetti, Hongwan Liu
@@ -19,6 +19,7 @@ Classifier: Programming Language :: Python :: 3.13
19
19
  Classifier: Programming Language :: Python :: 3.14
20
20
  Requires-Python: >=3.8
21
21
  Description-Content-Type: text/markdown
22
+ License-File: LICENSE
22
23
  Requires-Dist: numpy
23
24
  Requires-Dist: scipy
24
25
  Requires-Dist: matplotlib
@@ -27,6 +28,8 @@ Requires-Dist: equinox==0.13.2
27
28
  Requires-Dist: interpax
28
29
  Requires-Dist: jax==0.8.1
29
30
  Requires-Dist: pytest
31
+ Requires-Dist: optimistix==0.0.11
32
+ Dynamic: license-file
30
33
 
31
34
  <h1 align="center">
32
35
  ABCMB<!-- omit from toc -->
@@ -34,6 +37,7 @@ ABCMB<!-- omit from toc -->
34
37
  <h4 align="center">
35
38
 
36
39
  [![License: MIT](https://img.shields.io/badge/License-MIT-red.svg)](https://opensource.org/licenses/MIT)
40
+ [![arXiv](https://img.shields.io/badge/arXiv-2602.15104%20-green.svg)](https://arxiv.org/abs/2602.15104)
37
41
  [![Run Tests](https://github.com/TonyZhou729/ABCMB/actions/workflows/accuracy.yml/badge.svg)](https://github.com/TonyZhou729/ABCMB/actions/workflows/accuracy.yml)
38
42
  <!--[![arXiv](https://img.shields.io/badge/arXiv-2408.14538%20-green.svg)](https://arxiv.org/abs/2408.14538) -->
39
43
 
@@ -42,14 +46,19 @@ ABCMB<!-- omit from toc -->
42
46
  Autodifferentiable Boltzmann solver for the CMB (ABCMB) is a Python+JAX package for differentiable computation of the Cosmic Microwave Background. ABCMB is **complete to linear order** in $\Lambda\rm{CDM}$ cosmology. It computes the matter and CMB power spectra and includes effects like lensing, massive neutrinos, and a state-of-the-art treatment of the physics of recombination through the companion code [HyRex](https://github.com/TonyZhou729/HyRex).
43
47
 
44
48
  ## Installation
45
- We recommend installing ABCMB in a clean conda environment. After downloading and unpacking the code, in the code directory run
49
+ ABCMB is pip installable! Just run
46
50
  ```
47
- conda create -n ABCMB
48
- conda activate ABCMB
49
- pip install -U -r requirements.txt
51
+ pip install ABCMB
52
+ ```
53
+ We recommend always doing so in a conda environment, preferably even a clean one.
50
54
 
55
+ If you'd like to clone the repo instead, after cloning you can run
56
+ ```
57
+ pip install .
51
58
  ```
52
- optionally specifying your preferred python version after the environment name. Note that this will automatically attempt to install JAX for CPU; to install for GPU, refer to the [JAX documentation](https://docs.jax.dev/en/latest/installation.html) for a quick JAX installation guide.
59
+ from the code directory.
60
+
61
+ Note that both methods of installing will automatically attempt to install JAX for CPU; to install for GPU, refer to the [JAX documentation](https://docs.jax.dev/en/latest/installation.html) for a quick JAX installation guide.
53
62
 
54
63
  ## Examples
55
64
  We have included several pedagogical jupyter notebooks to walk you through how to get started with ABCMB in our [example_notebooks](https://github.com/TonyZhou729/ABCMB/tree/main/example_notebooks) folder. We suggest you start with [ABCMB_basics](https://github.com/TonyZhou729/ABCMB/blob/main/example_notebooks/ABCMB_basics.ipynb) to get a sense of how to run the code. If you'd like to add new physics to ABCMB, check out [ABCMB_Fluids](https://github.com/TonyZhou729/ABCMB/blob/main/example_notebooks/ABCMB_Fluids.ipynb). If you'd like to run ABCMB with the Big Bang Nucleosynthesis (BBN) code [LINX](https://github.com/cgiovanetti/LINX/tree/main) to do BBN+CMB joint analyses, check out [ABCMB_with_LINX](https://github.com/TonyZhou729/ABCMB/blob/main/example_notebooks/ABCMB_with_LINX.ipynb).
@@ -57,5 +66,20 @@ We have included several pedagogical jupyter notebooks to walk you through how t
57
66
  ## Issues
58
67
  Please feel free to open an issue if something is amiss in ABCMB!
59
68
 
69
+ ## Citation
70
+
71
+ If you use ABCMB to publish scientific research, we suggest you cite
72
+ ```
73
+ @misc{abcmb,
74
+ title={{ABCMB: A Python+JAX Package for the Cosmic Microwave Background Power Spectrum}},
75
+ author={Zilu Zhou and Cara Giovanetti and Hongwan Liu},
76
+ year={2026},
77
+ eprint={2602.15104},
78
+ archivePrefix={arXiv},
79
+ primaryClass={astro-ph.CO},
80
+ url={https://arxiv.org/abs/2602.15104},
81
+ }
82
+ ```
83
+
60
84
 
61
85
 
@@ -4,6 +4,7 @@ ABCMB<!-- omit from toc -->
4
4
  <h4 align="center">
5
5
 
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-red.svg)](https://opensource.org/licenses/MIT)
7
+ [![arXiv](https://img.shields.io/badge/arXiv-2602.15104%20-green.svg)](https://arxiv.org/abs/2602.15104)
7
8
  [![Run Tests](https://github.com/TonyZhou729/ABCMB/actions/workflows/accuracy.yml/badge.svg)](https://github.com/TonyZhou729/ABCMB/actions/workflows/accuracy.yml)
8
9
  <!--[![arXiv](https://img.shields.io/badge/arXiv-2408.14538%20-green.svg)](https://arxiv.org/abs/2408.14538) -->
9
10
 
@@ -12,14 +13,19 @@ ABCMB<!-- omit from toc -->
12
13
  Autodifferentiable Boltzmann solver for the CMB (ABCMB) is a Python+JAX package for differentiable computation of the Cosmic Microwave Background. ABCMB is **complete to linear order** in $\Lambda\rm{CDM}$ cosmology. It computes the matter and CMB power spectra and includes effects like lensing, massive neutrinos, and a state-of-the-art treatment of the physics of recombination through the companion code [HyRex](https://github.com/TonyZhou729/HyRex).
13
14
 
14
15
  ## Installation
15
- We recommend installing ABCMB in a clean conda environment. After downloading and unpacking the code, in the code directory run
16
+ ABCMB is pip installable! Just run
16
17
  ```
17
- conda create -n ABCMB
18
- conda activate ABCMB
19
- pip install -U -r requirements.txt
18
+ pip install ABCMB
19
+ ```
20
+ We recommend always doing so in a conda environment, preferably even a clean one.
20
21
 
22
+ If you'd like to clone the repo instead, after cloning you can run
23
+ ```
24
+ pip install .
21
25
  ```
22
- optionally specifying your preferred python version after the environment name. Note that this will automatically attempt to install JAX for CPU; to install for GPU, refer to the [JAX documentation](https://docs.jax.dev/en/latest/installation.html) for a quick JAX installation guide.
26
+ from the code directory.
27
+
28
+ Note that both methods of installing will automatically attempt to install JAX for CPU; to install for GPU, refer to the [JAX documentation](https://docs.jax.dev/en/latest/installation.html) for a quick JAX installation guide.
23
29
 
24
30
  ## Examples
25
31
  We have included several pedagogical jupyter notebooks to walk you through how to get started with ABCMB in our [example_notebooks](https://github.com/TonyZhou729/ABCMB/tree/main/example_notebooks) folder. We suggest you start with [ABCMB_basics](https://github.com/TonyZhou729/ABCMB/blob/main/example_notebooks/ABCMB_basics.ipynb) to get a sense of how to run the code. If you'd like to add new physics to ABCMB, check out [ABCMB_Fluids](https://github.com/TonyZhou729/ABCMB/blob/main/example_notebooks/ABCMB_Fluids.ipynb). If you'd like to run ABCMB with the Big Bang Nucleosynthesis (BBN) code [LINX](https://github.com/cgiovanetti/LINX/tree/main) to do BBN+CMB joint analyses, check out [ABCMB_with_LINX](https://github.com/TonyZhou729/ABCMB/blob/main/example_notebooks/ABCMB_with_LINX.ipynb).
@@ -27,5 +33,20 @@ We have included several pedagogical jupyter notebooks to walk you through how t
27
33
  ## Issues
28
34
  Please feel free to open an issue if something is amiss in ABCMB!
29
35
 
36
+ ## Citation
37
+
38
+ If you use ABCMB to publish scientific research, we suggest you cite
39
+ ```
40
+ @misc{abcmb,
41
+ title={{ABCMB: A Python+JAX Package for the Cosmic Microwave Background Power Spectrum}},
42
+ author={Zilu Zhou and Cara Giovanetti and Hongwan Liu},
43
+ year={2026},
44
+ eprint={2602.15104},
45
+ archivePrefix={arXiv},
46
+ primaryClass={astro-ph.CO},
47
+ url={https://arxiv.org/abs/2602.15104},
48
+ }
49
+ ```
50
+
30
51
 
31
52
 
@@ -27,9 +27,9 @@ def wigner_d_matrix(mu, ells, m, n):
27
27
  ells : array
28
28
  Multipole values [m, m+1, m+2, ..., ellmax]
29
29
  m : int
30
- First index (must be positive and >= |n|)
30
+ First index (must be positive and >= abs(n))
31
31
  n : int
32
- Second index (must satisfy |n| <= m)
32
+ Second index (must satisfy abs(n) <= m)
33
33
 
34
34
  Returns:
35
35
  --------
@@ -102,14 +102,14 @@ def d1n(mu, ells, n):
102
102
  ells : array
103
103
  Multipole values
104
104
  n : int
105
- Second index (|n| <= 1)
105
+ Second index (abs(n) <= 1)
106
106
 
107
107
  Returns:
108
108
  --------
109
109
  array
110
110
  d^ell_{1n} elements
111
111
  """
112
- # Wigner matrices where m=1, and |n|<=m.
112
+ # Wigner matrices where m=1, and abs(n)<=m.
113
113
  ells_patched = jnp.concatenate((jnp.array([1]), ells))
114
114
  res = wigner_d_matrix(mu, ells_patched, 1, n)
115
115
  return res[:, 1:]
@@ -125,14 +125,14 @@ def d2n(mu, ells, n):
125
125
  ells : array
126
126
  Multipole values
127
127
  n : int
128
- Second index (|n| <= 2)
128
+ Second index (abs(n) <= 2)
129
129
 
130
130
  Returns:
131
131
  --------
132
132
  array
133
133
  d^ell_{2n} elements
134
134
  """
135
- # Wigner matrices where m=2, and |n|<=m.
135
+ # Wigner matrices where m=2, and abs(n)<=m.
136
136
  res = wigner_d_matrix(mu, ells, 2, n)
137
137
  return res
138
138
 
@@ -147,14 +147,14 @@ def d3n(mu, ells, n):
147
147
  ells : array
148
148
  Multipole values
149
149
  n : int
150
- Second index (|n| <= 3)
150
+ Second index (abs(n) <= 3)
151
151
 
152
152
  Returns:
153
153
  --------
154
154
  array
155
155
  d^ell_{3n} elements, zero-padded for ell < 3
156
156
  """
157
- # Wigner matrices where m=3, and |n|<=m.
157
+ # Wigner matrices where m=3, and abs(n)<=m.
158
158
  ells_sliced = ells[1:] # Compute starting at ell=3
159
159
  res = wigner_d_matrix(mu, ells_sliced, 3, n)
160
160
  res_patched = jnp.concatenate((jnp.zeros((mu.size, 1)), res), axis=1) # Pad zeros for ell<3.
@@ -171,14 +171,14 @@ def d4n(mu, ells, n):
171
171
  ells : array
172
172
  Multipole values
173
173
  n : int
174
- Second index (|n| <= 4)
174
+ Second index (abs(n) <= 4)
175
175
 
176
176
  Returns:
177
177
  --------
178
178
  array
179
179
  d^ell_{4n} elements, zero-padded for ell < 4
180
180
  """
181
- # Wigner matrices where m=4, and |n|<=m.
181
+ # Wigner matrices where m=4, and abs(n)<=m.
182
182
  ells_sliced = ells[2:] # Compute starting at ell=4
183
183
  res = wigner_d_matrix(mu, ells_sliced, 4, n)
184
184
  res_patched = jnp.concatenate((jnp.zeros((mu.size, 2)), res), axis=1) # Pad zeros for ell<4.
@@ -0,0 +1,7 @@
1
+ """
2
+ ABCMB.
3
+
4
+ A fully differentiable Boltzmann solver for the CMB.
5
+ """
6
+
7
+ __author__ = 'Zilu Zhou, Cara Giovanetti, and Hongwan Liu'
@@ -102,8 +102,6 @@ class Background(eqx.Module):
102
102
  tau_reion : float
103
103
  lna_rec : float
104
104
  rA_rec : float # Comoving angular diameter distance at recombination.
105
- rs_d : float # Sound horizon at baryon decoupling
106
- z_d : float # redshift of baryon decoupling
107
105
 
108
106
  # Transfer related
109
107
  lna_transfer_start : float # Time where transfer functions start integrating.
@@ -374,7 +372,7 @@ class Background(eqx.Module):
374
372
  saveat=saveat,
375
373
  stepsize_controller=controller,
376
374
  args=params,
377
- adjoint=adjoint
375
+ adjoint=adjoint,
378
376
  )
379
377
 
380
378
  # Numerical jitter causes this interpolation to go out of bounds on
@@ -614,14 +612,14 @@ class Background(eqx.Module):
614
612
  adjoint=ForwardMode()
615
613
  sol = diffeqsolve(
616
614
  term,
617
- solver=Kvaerno5(), # Higher order integrator for more accuracy
615
+ solver=Kvaerno5(),
618
616
  stepsize_controller=stepsize_controller,
619
- t0=0., # Initial x value (~0 in this case)
620
- t1=-10., # Final x value (smallest x value)
621
- dt0=-1.e-3, # Initial step size
617
+ t0=0.,
618
+ t1=-10.,
619
+ dt0=-1.e-3,
622
620
  max_steps=2048,
623
- y0=0.0, # Initial value tau(x=0) = 0
624
- saveat=SaveAt(dense=True), # Save at all points in x, reverse order since integrating backwards
621
+ y0=0.0,
622
+ saveat=SaveAt(dense=True),
625
623
  adjoint=adjoint
626
624
  )
627
625
  return sol
@@ -771,7 +769,7 @@ class Background(eqx.Module):
771
769
  array
772
770
  Tabulated baryon optical depth values (units: dimensionless)
773
771
  """
774
- integrand = lambda lna, y, args: jnp.float64(-1./self.tau_c(lna, params)/self.aH(lna, params)/(self.R_ratio_lna(lna)))
772
+ integrand = lambda lna, y, args: jnp.float64(-1./self.tau_c(lna, params)/self.aH(lna, params)/(self.R_ratio_lna(lna, params)))
775
773
  term = ODETerm(integrand)
776
774
  stepsize_controller = PIDController(pcoeff=0.4, icoeff=0.3, dcoeff=0, rtol=1.e-3, atol=1.e-6)
777
775
  adjoint=ForwardMode()
@@ -812,7 +810,7 @@ class Background(eqx.Module):
812
810
  # initial condition assuming cs**2 = 1/3 at early times
813
811
  rs0 = 1./jnp.sqrt(3) / (self.aH( self.lna_tau_tab[0], params ))
814
812
 
815
- integrand = lambda lna, y, args: 1./jnp.sqrt(3*(1+self.R_ratio_lna(lna))) / (self.aH(lna, params))
813
+ integrand = lambda lna, y, args: 1./jnp.sqrt(3*(1+self.R_ratio_lna(lna, params))) / (self.aH(lna, params))
816
814
  term = ODETerm(integrand)
817
815
  stepsize_controller = PIDController(pcoeff=0.4, icoeff=0.3, dcoeff=0, rtol=1.e-3, atol=1.e-6)
818
816
  adjoint=ForwardMode()
@@ -850,7 +848,7 @@ class Background(eqx.Module):
850
848
  float
851
849
  Decoupling redshift (units: dimensionless)
852
850
  """
853
- return self.find_z_at_kappad_equals_one(1/jnp.exp(self.lna_tau_tab) - 1, self._tabulate_kappa_d())
851
+ return self.find_z_at_kappad_equals_one(1/jnp.exp(self.lna_tau_tab) - 1, self._tabulate_kappa_d(params))
854
852
 
855
853
  def rs_d(self, params):
856
854
  """
@@ -868,16 +866,19 @@ class Background(eqx.Module):
868
866
  float
869
867
  Sound horizon at decoupling (units: Mpc)
870
868
  """
871
- return self.interp_rs_at_z(1/jnp.exp(self.lna_tau_tab) - 1, self._tabulate_rs(), self.z_d())
869
+ return self.interp_rs_at_z(1/jnp.exp(self.lna_tau_tab) - 1, self._tabulate_rs(params), self.z_d(params))
872
870
 
873
871
  class ReionizationModel(eqx.Module):
874
872
  """
875
873
  Object for computing the reionization correction to the free electron fraction.
876
874
  Provides the base methods
877
- xe_reion : calculates the tanh electron fraction correction at redshifts lna, given z_reion and params
878
- tau_reion_fn : calculates the optical depth to reionization.
875
+
876
+ xe_reion : calculates the tanh electron fraction correction at redshifts lna, given z_reion and params
877
+ tau_reion_fn : calculates the optical depth to reionization.
878
+
879
879
  At the moment we only support the CAMB tanh parameterization, but we need different approaches
880
880
  based on whether the use inputs the optical depth tau_reion or the reionization redshift z_reion.
881
+
881
882
  """
882
883
 
883
884
  z_reion : jnp.float64