py-lfkit 0.3.0__tar.gz → 0.5.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 (306) hide show
  1. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/PKG-INFO +1 -1
  2. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/about/photometry_overview.rst +1 -1
  3. py_lfkit-0.5.0/docs/api/index.rst +8 -0
  4. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/examples/conditional_luminosity_function.rst +6 -4
  5. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/examples/lf_models/composite_models.rst +2 -2
  6. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/examples/lf_models/power_law_models.rst +4 -4
  7. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/examples/lf_models/schechter_models.rst +1 -1
  8. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/pyproject.toml +15 -27
  9. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/_version.py +3 -3
  10. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/api/_namespaces.py +52 -9
  11. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/api/conditional_luminosity_function.py +71 -47
  12. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/api/luminosity_function.py +74 -51
  13. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/luminosity_functions/_discovery.py +6 -2
  14. py_lfkit-0.5.0/src/lfkit/luminosity_functions/conditional_integrals.py +171 -0
  15. py_lfkit-0.5.0/src/lfkit/luminosity_functions/conditional_models.py +136 -0
  16. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/luminosity_functions/integrals.py +86 -7
  17. py_lfkit-0.5.0/src/lfkit/luminosity_functions/models/composite.py +178 -0
  18. py_lfkit-0.5.0/src/lfkit/luminosity_functions/models/gamma.py +145 -0
  19. py_lfkit-0.5.0/src/lfkit/luminosity_functions/models/gaussian.py +167 -0
  20. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/luminosity_functions/models/modifiers.py +21 -1
  21. py_lfkit-0.5.0/src/lfkit/luminosity_functions/models/non_parametric.py +718 -0
  22. py_lfkit-0.5.0/src/lfkit/luminosity_functions/models/power_law.py +242 -0
  23. py_lfkit-0.5.0/src/lfkit/luminosity_functions/models/saunders.py +230 -0
  24. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/luminosity_functions/models/schechter.py +141 -51
  25. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/luminosity_functions/parameter_models.py +82 -52
  26. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/luminosity_functions/redshift_density.py +37 -11
  27. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/luminosity_functions/registry.py +118 -18
  28. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/photometry/luminosities.py +6 -7
  29. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/utils/integrators.py +13 -0
  30. py_lfkit-0.5.0/src/lfkit/utils/validators.py +241 -0
  31. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/py_lfkit.egg-info/PKG-INFO +1 -1
  32. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/py_lfkit.egg-info/SOURCES.txt +14 -41
  33. py_lfkit-0.5.0/tests/test_api_conditional_luminosity_function.py +307 -0
  34. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_api_corrections.py +1 -1
  35. py_lfkit-0.5.0/tests/test_api_luminosity_function.py +900 -0
  36. py_lfkit-0.5.0/tests/test_api_namespaces.py +282 -0
  37. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_corrections_color_anchors.py +1 -1
  38. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_corrections_filters.py +1 -1
  39. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_corrections_kcorrect_backend.py +1 -1
  40. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_corrections_kcorrect_from_color.py +1 -1
  41. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_corrections_kcorrrect_grids.py +1 -1
  42. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_corrections_poggianti1997.py +1 -1
  43. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_corrections_responses.py +1 -1
  44. py_lfkit-0.5.0/tests/test_cosmo_cosmology.py +182 -0
  45. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_lumfuncs_completeness.py +12 -1
  46. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_lumfuncs_completeness_fake_catalog.py +43 -0
  47. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_lumfuncs_conditional_integrals.py +119 -32
  48. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_lumfuncs_conditional_models.py +139 -36
  49. py_lfkit-0.5.0/tests/test_lumfuncs_discovery.py +220 -0
  50. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_lumfuncs_integrals.py +102 -1
  51. py_lfkit-0.5.0/tests/test_lumfuncs_models_composite.py +367 -0
  52. py_lfkit-0.5.0/tests/test_lumfuncs_models_gamma.py +387 -0
  53. py_lfkit-0.5.0/tests/test_lumfuncs_models_gaussian.py +420 -0
  54. py_lfkit-0.5.0/tests/test_lumfuncs_models_modifiers.py +193 -0
  55. py_lfkit-0.5.0/tests/test_lumfuncs_models_non_parametric.py +515 -0
  56. py_lfkit-0.5.0/tests/test_lumfuncs_models_power_law.py +417 -0
  57. py_lfkit-0.5.0/tests/test_lumfuncs_models_saunders.py +505 -0
  58. py_lfkit-0.5.0/tests/test_lumfuncs_models_schechter.py +815 -0
  59. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_lumfuncs_parameter_models.py +44 -1
  60. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_lumfuncs_redshift_density.py +68 -1
  61. py_lfkit-0.5.0/tests/test_lumfuncs_registry.py +463 -0
  62. py_lfkit-0.5.0/tests/test_photometry_luminosities.py +274 -0
  63. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_photometry_magnitudes.py +130 -1
  64. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_utils_download_pogg97_data.py +1 -1
  65. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_utils_evaluators.py +176 -1
  66. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/test_utils_integrators.py +191 -1
  67. py_lfkit-0.5.0/tests/test_utils_interpolation.py +360 -0
  68. py_lfkit-0.5.0/tests/test_utils_io.py +347 -0
  69. py_lfkit-0.5.0/tests/test_utils_types.py +75 -0
  70. py_lfkit-0.5.0/tests/test_utils_units.py +199 -0
  71. py_lfkit-0.5.0/tests/test_utils_validators.py +663 -0
  72. py_lfkit-0.3.0/docs/api/index.rst +0 -16
  73. py_lfkit-0.3.0/docs/api/lfkit.api.conditional_luminosity_function.rst +0 -12
  74. py_lfkit-0.3.0/docs/api/lfkit.api.corrections.rst +0 -12
  75. py_lfkit-0.3.0/docs/api/lfkit.api.luminosity_function.rst +0 -12
  76. py_lfkit-0.3.0/docs/api/lfkit.api.rst +0 -15
  77. py_lfkit-0.3.0/docs/api/lfkit.corrections.color_anchors.rst +0 -12
  78. py_lfkit-0.3.0/docs/api/lfkit.corrections.filters.rst +0 -17
  79. py_lfkit-0.3.0/docs/api/lfkit.corrections.kcorrect_backend.rst +0 -12
  80. py_lfkit-0.3.0/docs/api/lfkit.corrections.kcorrect_from_color.rst +0 -12
  81. py_lfkit-0.3.0/docs/api/lfkit.corrections.kcorrect_grids.rst +0 -14
  82. py_lfkit-0.3.0/docs/api/lfkit.corrections.poggianti1997.rst +0 -21
  83. py_lfkit-0.3.0/docs/api/lfkit.corrections.responses.rst +0 -16
  84. py_lfkit-0.3.0/docs/api/lfkit.corrections.rst +0 -19
  85. py_lfkit-0.3.0/docs/api/lfkit.cosmo.cosmology.rst +0 -17
  86. py_lfkit-0.3.0/docs/api/lfkit.cosmo.rst +0 -13
  87. py_lfkit-0.3.0/docs/api/lfkit.luminosity_functions.completeness.rst +0 -16
  88. py_lfkit-0.3.0/docs/api/lfkit.luminosity_functions.conditional_integrals.rst +0 -14
  89. py_lfkit-0.3.0/docs/api/lfkit.luminosity_functions.conditional_models.rst +0 -12
  90. py_lfkit-0.3.0/docs/api/lfkit.luminosity_functions.integrals.rst +0 -21
  91. py_lfkit-0.3.0/docs/api/lfkit.luminosity_functions.models.composite.rst +0 -13
  92. py_lfkit-0.3.0/docs/api/lfkit.luminosity_functions.models.gaussian.rst +0 -13
  93. py_lfkit-0.3.0/docs/api/lfkit.luminosity_functions.models.modifiers.rst +0 -12
  94. py_lfkit-0.3.0/docs/api/lfkit.luminosity_functions.models.power_law.rst +0 -15
  95. py_lfkit-0.3.0/docs/api/lfkit.luminosity_functions.models.rst +0 -17
  96. py_lfkit-0.3.0/docs/api/lfkit.luminosity_functions.models.schechter.rst +0 -19
  97. py_lfkit-0.3.0/docs/api/lfkit.luminosity_functions.parameter_models.rst +0 -23
  98. py_lfkit-0.3.0/docs/api/lfkit.luminosity_functions.redshift_density.rst +0 -13
  99. py_lfkit-0.3.0/docs/api/lfkit.luminosity_functions.registry.rst +0 -24
  100. py_lfkit-0.3.0/docs/api/lfkit.luminosity_functions.rst +0 -20
  101. py_lfkit-0.3.0/docs/api/lfkit.photometry.luminosities.rst +0 -16
  102. py_lfkit-0.3.0/docs/api/lfkit.photometry.magnitudes.rst +0 -16
  103. py_lfkit-0.3.0/docs/api/lfkit.photometry.rst +0 -14
  104. py_lfkit-0.3.0/docs/api/lfkit.rst +0 -18
  105. py_lfkit-0.3.0/docs/api/lfkit.utils.download_poggianti97_data.rst +0 -12
  106. py_lfkit-0.3.0/docs/api/lfkit.utils.evaluators.rst +0 -16
  107. py_lfkit-0.3.0/docs/api/lfkit.utils.integrators.rst +0 -13
  108. py_lfkit-0.3.0/docs/api/lfkit.utils.interpolation.rst +0 -15
  109. py_lfkit-0.3.0/docs/api/lfkit.utils.io.rst +0 -18
  110. py_lfkit-0.3.0/docs/api/lfkit.utils.rst +0 -20
  111. py_lfkit-0.3.0/docs/api/lfkit.utils.types.rst +0 -6
  112. py_lfkit-0.3.0/docs/api/lfkit.utils.units.rst +0 -17
  113. py_lfkit-0.3.0/docs/api/lfkit.utils.validators.rst +0 -14
  114. py_lfkit-0.3.0/src/lfkit/luminosity_functions/conditional_integrals.py +0 -152
  115. py_lfkit-0.3.0/src/lfkit/luminosity_functions/conditional_models.py +0 -83
  116. py_lfkit-0.3.0/src/lfkit/luminosity_functions/models/composite.py +0 -96
  117. py_lfkit-0.3.0/src/lfkit/luminosity_functions/models/gaussian.py +0 -89
  118. py_lfkit-0.3.0/src/lfkit/luminosity_functions/models/power_law.py +0 -115
  119. py_lfkit-0.3.0/src/lfkit/utils/validators.py +0 -63
  120. py_lfkit-0.3.0/tests/test_api_conditional_luminosity_function.py +0 -140
  121. py_lfkit-0.3.0/tests/test_api_luminosity_function.py +0 -498
  122. py_lfkit-0.3.0/tests/test_cosmo_cosmology.py +0 -74
  123. py_lfkit-0.3.0/tests/test_lumfuncs_models_schechter.py +0 -254
  124. py_lfkit-0.3.0/tests/test_photometry_luminosities.py +0 -82
  125. py_lfkit-0.3.0/tests/test_utils_interpolation.py +0 -131
  126. py_lfkit-0.3.0/tests/test_utils_io.py +0 -128
  127. py_lfkit-0.3.0/tests/test_utils_units.py +0 -90
  128. py_lfkit-0.3.0/tests/test_utils_validators.py +0 -184
  129. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/.github/workflows/ci.yml +0 -0
  130. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/.github/workflows/docs.yml +0 -0
  131. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/.github/workflows/publish.yml +0 -0
  132. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/.gitignore +0 -0
  133. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/CITATION.cff +0 -0
  134. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/LICENSE +0 -0
  135. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/MANIFEST.in +0 -0
  136. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/README.md +0 -0
  137. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/Makefile +0 -0
  138. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/_static/custom.css +0 -0
  139. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/_static/logos/lfkit_logo-icon.png +0 -0
  140. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/_static/logos/lfkit_logo.pdf +0 -0
  141. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/_static/logos/lfkit_logo.png +0 -0
  142. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/_static/logos/lfkit_logo.svg +0 -0
  143. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/_templates/pages_redirect.html +0 -0
  144. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/_templates/sidebar/brand.html +0 -0
  145. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/about/corrections_overview.rst +0 -0
  146. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/about/index.rst +0 -0
  147. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/citation.rst +0 -0
  148. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/conf.py +0 -0
  149. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/contributing.rst +0 -0
  150. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/examples/catalog_completeness.rst +0 -0
  151. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/examples/index.rst +0 -0
  152. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/examples/kcorrect_examples.rst +0 -0
  153. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/examples/lf_models/gaussian_models.rst +0 -0
  154. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/examples/lf_models/index.rst +0 -0
  155. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/examples/lf_models/model_registry.rst +0 -0
  156. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/examples/magnitude_integrals.rst +0 -0
  157. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/examples/magnitudes_and_luminosities.rst +0 -0
  158. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/examples/poggianti_examples.rst +0 -0
  159. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/examples/redshift_density.rst +0 -0
  160. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/index.rst +0 -0
  161. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/installation.rst +0 -0
  162. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/license.rst +0 -0
  163. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/docs/make.bat +0 -0
  164. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/logo/lfkit_github_banner.png +0 -0
  165. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/logo/lfkit_logo-icon.png +0 -0
  166. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/logo/lfkit_logo.pdf +0 -0
  167. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/logo/lfkit_logo.png +0 -0
  168. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/logo/lfkit_logo.svg +0 -0
  169. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/logo/make_gh_banner.py +0 -0
  170. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/logo/make_logo.py +0 -0
  171. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-g__blue-red__surveys-native-gr.pdf +0 -0
  172. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-g__blue-red__surveys-native-gr.png +0 -0
  173. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-i__blue-red__surveys-native-gr.pdf +0 -0
  174. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-i__blue-red__surveys-native-gr.png +0 -0
  175. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-r__blue-red__surveys-native-gr.pdf +0 -0
  176. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-r__blue-red__surveys-native-gr.png +0 -0
  177. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-u__blue-red__surveys-native-gr.pdf +0 -0
  178. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-u__blue-red__surveys-native-gr.png +0 -0
  179. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-z__blue-red__surveys-native-gr.pdf +0 -0
  180. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-z__blue-red__surveys-native-gr.png +0 -0
  181. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_poggianti_to_kcorrect/bessell/Kcurves__system-bessell__band-B__zmax-3.5__nz-401__pchip__extrap-1__anchorz0-1.pdf +0 -0
  182. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_poggianti_to_kcorrect/bessell/Kcurves__system-bessell__band-B__zmax-3.5__nz-401__pchip__extrap-1__anchorz0-1.png +0 -0
  183. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_poggianti_to_kcorrect/bessell/Kcurves__system-bessell__band-I__zmax-3.5__nz-401__pchip__extrap-1__anchorz0-1.pdf +0 -0
  184. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_poggianti_to_kcorrect/bessell/Kcurves__system-bessell__band-I__zmax-3.5__nz-401__pchip__extrap-1__anchorz0-1.png +0 -0
  185. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_poggianti_to_kcorrect/bessell/Kcurves__system-bessell__band-R__zmax-3.5__nz-401__pchip__extrap-1__anchorz0-1.pdf +0 -0
  186. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_poggianti_to_kcorrect/bessell/Kcurves__system-bessell__band-R__zmax-3.5__nz-401__pchip__extrap-1__anchorz0-1.png +0 -0
  187. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_poggianti_to_kcorrect/bessell/Kcurves__system-bessell__band-U__zmax-3.5__nz-401__pchip__extrap-1__anchorz0-1.pdf +0 -0
  188. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_poggianti_to_kcorrect/bessell/Kcurves__system-bessell__band-U__zmax-3.5__nz-401__pchip__extrap-1__anchorz0-1.png +0 -0
  189. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_poggianti_to_kcorrect/bessell/Kcurves__system-bessell__band-V__zmax-3.5__nz-401__pchip__extrap-1__anchorz0-1.pdf +0 -0
  190. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_poggianti_to_kcorrect/bessell/Kcurves__system-bessell__band-V__zmax-3.5__nz-401__pchip__extrap-1__anchorz0-1.png +0 -0
  191. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_poggianti_to_kcorrect/sdss/Kcurves__system-sdss__band-g__zmax-3.5__nz-401__pchip__extrap-1__anchorz0-1.pdf +0 -0
  192. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_poggianti_to_kcorrect/sdss/Kcurves__system-sdss__band-g__zmax-3.5__nz-401__pchip__extrap-1__anchorz0-1.png +0 -0
  193. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_poggianti_to_kcorrect/sdss/Kcurves__system-sdss__band-i__zmax-3.5__nz-401__pchip__extrap-1__anchorz0-1.pdf +0 -0
  194. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_poggianti_to_kcorrect/sdss/Kcurves__system-sdss__band-i__zmax-3.5__nz-401__pchip__extrap-1__anchorz0-1.png +0 -0
  195. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_poggianti_to_kcorrect/sdss/Kcurves__system-sdss__band-r__zmax-3.5__nz-401__pchip__extrap-1__anchorz0-1.pdf +0 -0
  196. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/compare_poggianti_to_kcorrect/sdss/Kcurves__system-sdss__band-r__zmax-3.5__nz-401__pchip__extrap-1__anchorz0-1.png +0 -0
  197. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__bessell__z0.0000_4.0__Nz801__bsnone/K__band_bessell_B.pdf +0 -0
  198. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__bessell__z0.0000_4.0__Nz801__bsnone/K__band_bessell_I.pdf +0 -0
  199. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__bessell__z0.0000_4.0__Nz801__bsnone/K__band_bessell_R.pdf +0 -0
  200. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__bessell__z0.0000_4.0__Nz801__bsnone/K__band_bessell_U.pdf +0 -0
  201. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__bessell__z0.0000_4.0__Nz801__bsnone/K__band_bessell_V.pdf +0 -0
  202. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__decam__z0.0000_4.0__Nz801__bsnone/K__band_decam_Y.pdf +0 -0
  203. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__decam__z0.0000_4.0__Nz801__bsnone/K__band_decam_g.pdf +0 -0
  204. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__decam__z0.0000_4.0__Nz801__bsnone/K__band_decam_i.pdf +0 -0
  205. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__decam__z0.0000_4.0__Nz801__bsnone/K__band_decam_r.pdf +0 -0
  206. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__decam__z0.0000_4.0__Nz801__bsnone/K__band_decam_u.pdf +0 -0
  207. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__decam__z0.0000_4.0__Nz801__bsnone/K__band_decam_z.pdf +0 -0
  208. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__sdss__z0.0000_4.0__Nz801__bsnone/K__band_sdss_g0.pdf +0 -0
  209. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__sdss__z0.0000_4.0__Nz801__bsnone/K__band_sdss_i0.pdf +0 -0
  210. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__sdss__z0.0000_4.0__Nz801__bsnone/K__band_sdss_r0.pdf +0 -0
  211. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__sdss__z0.0000_4.0__Nz801__bsnone/K__band_sdss_u0.pdf +0 -0
  212. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__sdss__z0.0000_4.0__Nz801__bsnone/K__band_sdss_z0.pdf +0 -0
  213. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone/K__band_subaru_suprimecam_B.pdf +0 -0
  214. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone/K__band_subaru_suprimecam_Ic.pdf +0 -0
  215. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone/K__band_subaru_suprimecam_Rc.pdf +0 -0
  216. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone/K__band_subaru_suprimecam_V.pdf +0 -0
  217. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone/K__band_subaru_suprimecam_g.pdf +0 -0
  218. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone/K__band_subaru_suprimecam_i.pdf +0 -0
  219. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone/K__band_subaru_suprimecam_r.pdf +0 -0
  220. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/kcorrect/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone/K__band_subaru_suprimecam_z.pdf +0 -0
  221. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_B_type_E.pdf +0 -0
  222. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_B_type_E2.pdf +0 -0
  223. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_B_type_Sa.pdf +0 -0
  224. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_B_type_Sc.pdf +0 -0
  225. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_H_type_E.pdf +0 -0
  226. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_H_type_E2.pdf +0 -0
  227. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_H_type_Sa.pdf +0 -0
  228. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_H_type_Sc.pdf +0 -0
  229. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_I_type_E.pdf +0 -0
  230. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_I_type_E2.pdf +0 -0
  231. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_I_type_Sa.pdf +0 -0
  232. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_I_type_Sc.pdf +0 -0
  233. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_Ic_type_E.pdf +0 -0
  234. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_Ic_type_Sc.pdf +0 -0
  235. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_J_type_E.pdf +0 -0
  236. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_J_type_E2.pdf +0 -0
  237. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_J_type_Sa.pdf +0 -0
  238. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_J_type_Sc.pdf +0 -0
  239. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_K_type_E.pdf +0 -0
  240. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_K_type_E2.pdf +0 -0
  241. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_K_type_Sa.pdf +0 -0
  242. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_K_type_Sc.pdf +0 -0
  243. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_R_type_E.pdf +0 -0
  244. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_R_type_E2.pdf +0 -0
  245. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_R_type_Sa.pdf +0 -0
  246. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_R_type_Sc.pdf +0 -0
  247. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_Rc_type_E.pdf +0 -0
  248. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_Rc_type_Sc.pdf +0 -0
  249. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_U_type_E.pdf +0 -0
  250. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_U_type_E2.pdf +0 -0
  251. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_U_type_Sa.pdf +0 -0
  252. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_U_type_Sc.pdf +0 -0
  253. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_V_type_E.pdf +0 -0
  254. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_V_type_E2.pdf +0 -0
  255. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_V_type_Sa.pdf +0 -0
  256. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_V_type_Sc.pdf +0 -0
  257. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_g_type_E.pdf +0 -0
  258. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_g_type_E2.pdf +0 -0
  259. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_g_type_Sa.pdf +0 -0
  260. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/output/plots/poggianti1997/ke_pogg1997_band_g_type_Sc.pdf +0 -0
  261. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/scripts/compare_kcorr_surveys.py +0 -0
  262. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/scripts/compare_poggianti_to_kcorrect.py +0 -0
  263. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/scripts/make_fake_magnitude_limited_catalog.py +0 -0
  264. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/scripts/plot_poggianti1997_corrections.py +0 -0
  265. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/setup.cfg +0 -0
  266. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/__init__.py +0 -0
  267. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/api/__init__.py +0 -0
  268. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/api/corrections.py +0 -0
  269. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/corrections/__init__.py +0 -0
  270. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/corrections/color_anchors.py +0 -0
  271. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/corrections/filters.py +0 -0
  272. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/corrections/kcorrect_backend.py +0 -0
  273. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/corrections/kcorrect_from_color.py +0 -0
  274. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/corrections/kcorrect_grids.py +0 -0
  275. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/corrections/poggianti1997.py +0 -0
  276. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/corrections/responses.py +0 -0
  277. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/cosmo/__init__.py +0 -0
  278. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/cosmo/cosmology.py +0 -0
  279. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/data/demo_catalogs/fake_magnitude_limited_catalog.csv +0 -0
  280. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/data/kcorrect/grids/kcorrect__bessell__z0.0000_4.0__Nz801__bsnone.npz +0 -0
  281. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/data/kcorrect/grids/kcorrect__decam__z0.0000_4.0__Nz801__bsnone.npz +0 -0
  282. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/data/kcorrect/grids/kcorrect__sdss__z0.0000_4.0__Nz801__bsnone.npz +0 -0
  283. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/data/kcorrect/grids/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone.npz +0 -0
  284. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/data/poggianti1997/__init__.py +0 -0
  285. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/data/poggianti1997/ecorr.csv +0 -0
  286. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/data/poggianti1997/filters.csv +0 -0
  287. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/data/poggianti1997/kcorr.csv +0 -0
  288. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/data/poggianti1997/kcorrv.csv +0 -0
  289. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/data/poggianti1997/sed.csv +0 -0
  290. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/luminosity_functions/__init__.py +0 -0
  291. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/luminosity_functions/completeness.py +0 -0
  292. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/luminosity_functions/models/__init__.py +0 -0
  293. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/photometry/__init__.py +0 -0
  294. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/photometry/magnitudes.py +0 -0
  295. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/utils/__init__.py +0 -0
  296. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/utils/download_poggianti97_data.py +0 -0
  297. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/utils/evaluators.py +0 -0
  298. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/utils/interpolation.py +0 -0
  299. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/utils/io.py +0 -0
  300. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/utils/types.py +0 -0
  301. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/lfkit/utils/units.py +0 -0
  302. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/py_lfkit.egg-info/dependency_links.txt +0 -0
  303. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/py_lfkit.egg-info/requires.txt +0 -0
  304. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/src/py_lfkit.egg-info/top_level.txt +0 -0
  305. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/benchmarks/test_cacciato_clf_reference.py +0 -0
  306. {py_lfkit-0.3.0 → py_lfkit-0.5.0}/tests/benchmarks/test_cacciato_hod_reference.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: py-lfkit
3
- Version: 0.3.0
3
+ Version: 0.5.0
4
4
  Summary: Luminosity functions and photometric corrections toolkit.
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -202,7 +202,7 @@ Here:
202
202
  - :math:`\alpha` is the faint-end slope,
203
203
  - :math:`x` is the luminosity ratio :math:`L/L_\star` written in magnitude form.
204
204
 
205
- The parameter :math:`M_\star` marks the transition between the power-law part of
205
+ The parameter :math:`M_\star` marks the transition between the power law part of
206
206
  the luminosity function and the exponential bright-end cutoff. The parameter
207
207
  :math:`\alpha` controls how rapidly the abundance rises toward fainter
208
208
  magnitudes. More negative values of :math:`\alpha` produce a steeper faint end.
@@ -0,0 +1,8 @@
1
+ API reference
2
+ =============
3
+
4
+ .. autosummary::
5
+ :toctree: generated
6
+ :recursive:
7
+
8
+ lfkit
@@ -25,7 +25,7 @@ mass, or another quantity.
25
25
 
26
26
  LFKit exposes conditional luminosity functions through
27
27
  :class:`lfkit.ConditionalLuminosityFunction`. Each constructor returns a
28
- luminosity-function object that can be evaluated with
28
+ luminosity function object that can be evaluated with
29
29
  ``lf.phi`` and integrated through the usual ``lf.integrals`` namespace.
30
30
 
31
31
  The examples below use redshift as the conditioning variable because this is
@@ -127,7 +127,7 @@ population evolves.
127
127
  Conditional Schechter surface
128
128
  -----------------------------
129
129
 
130
- The same conditional Schechter model can be evaluated over the full
130
+ The same conditional luminosity function model can be evaluated over the full
131
131
  magnitude-redshift plane rather than at a few selected redshifts.
132
132
 
133
133
  The filled colour scale shows :math:`\log_{10}\Phi(M \mid z)`. The contours
@@ -387,10 +387,12 @@ The model therefore changes both in amplitude and in shape.
387
387
  cmap_range=(0.0, 0.2),
388
388
  )
389
389
 
390
- lf = ConditionalLuminosityFunction.schechter(
390
+ lf = ConditionalLuminosityFunction.double_schechter(
391
391
  phi_star=lambda z: 1.2e-3 * (1.0 + z) ** 0.5,
392
392
  m_star=lambda z: -20.3 - 0.5 * (z - 0.1),
393
393
  alpha=lambda z: -1.15 - 0.10 * z,
394
+ beta=lambda z: -0.45 - 0.05 * z,
395
+ m_transition=lambda z: -19.0 - 0.3 * (z - 0.1),
394
396
  )
395
397
 
396
398
  fig, ax = plt.subplots(figsize=(7.0, 5.0))
@@ -423,7 +425,7 @@ It is useful to compare the component shapes at fixed condition before combining
423
425
  them into more complicated models. This separates differences in functional
424
426
  form from differences caused by redshift or halo-mass evolution.
425
427
 
426
- The standard Schechter form has a power-law faint end and an exponential
428
+ The standard Schechter form has a power law faint end and an exponential
427
429
  bright-end cutoff. The modified Schechter component has a broader bright-end
428
430
  shape. The lognormal component is localized around a characteristic luminosity.
429
431
  Together, these examples show the kinds of galaxy populations each component is
@@ -5,7 +5,7 @@
5
5
  |lfkitlogo| Composite models
6
6
  =============================
7
7
 
8
- Composite models combine multiple luminosity-function components. They are
8
+ Composite models combine multiple luminosity function components. They are
9
9
  useful when a population is better described as a mixture rather than by one
10
10
  single analytic shape.
11
11
 
@@ -83,7 +83,7 @@ function with a suppressed bright end.
83
83
  Luminosity cutoff modifier
84
84
  --------------------------
85
85
 
86
- A luminosity cutoff can be applied to an existing luminosity-function object.
86
+ A luminosity cutoff can be applied to an existing luminosity function object.
87
87
  This keeps the base model unchanged and returns a new object whose
88
88
  :meth:`lfkit.LuminosityFunction.phi` values are multiplied by a bright-end
89
89
  cutoff.
@@ -13,7 +13,7 @@ a Schechter-like exponential cutoff.
13
13
  Single power law
14
14
  ----------------
15
15
 
16
- The single power-law model has one slope. In magnitude space, this gives a
16
+ The single power law model has one slope. In magnitude space, this gives a
17
17
  straight-line trend when shown on a logarithmic :math:`\Phi(M)` axis.
18
18
 
19
19
  .. plot::
@@ -58,7 +58,7 @@ straight-line trend when shown on a logarithmic :math:`\Phi(M)` axis.
58
58
  r"$\Phi(M)$ [$\mathrm{Mpc}^{-3}\,\mathrm{mag}^{-1}$]",
59
59
  fontsize=LABEL_SIZE,
60
60
  )
61
- ax.set_title("Single power-law luminosity functions", fontsize=TITLE_SIZE)
61
+ ax.set_title("Single power law luminosity functions", fontsize=TITLE_SIZE)
62
62
  ax.tick_params(axis="both", labelsize=TICK_SIZE)
63
63
  ax.legend(frameon=True, fontsize=LEGEND_SIZE, loc="best")
64
64
  plt.tight_layout()
@@ -148,7 +148,7 @@ and faint sides need different behaviour without using a Schechter cutoff.
148
148
  Log-normalized power law
149
149
  ------------------------
150
150
 
151
- The log-normalized power-law model is the same power-law shape, but the
151
+ The log-normalized power law model is the same power law shape, but the
152
152
  normalization is supplied as ``log_phi_star``. This is convenient for fitting
153
153
  or sampling applications where the normalization is naturally varied in
154
154
  logarithmic space.
@@ -199,7 +199,7 @@ logarithmic space.
199
199
  r"$\Phi(M)$ [$\mathrm{Mpc}^{-3}\,\mathrm{mag}^{-1}$]",
200
200
  fontsize=LABEL_SIZE,
201
201
  )
202
- ax.set_title("Log-normalized power-law models", fontsize=TITLE_SIZE)
202
+ ax.set_title("Log-normalized power law models", fontsize=TITLE_SIZE)
203
203
  ax.tick_params(axis="both", labelsize=TICK_SIZE)
204
204
  ax.legend(frameon=True, fontsize=LEGEND_SIZE, loc="best")
205
205
  plt.tight_layout()
@@ -5,7 +5,7 @@
5
5
  |lfkitlogo| Schechter family models
6
6
  ===================================
7
7
 
8
- The Schechter family contains luminosity functions with a power-law faint end
8
+ The Schechter family contains luminosity functions with a power law faint end
9
9
  and a bright-end cutoff. These models are commonly used when the abundance of
10
10
  faint galaxies rises approximately as a power law, while the most luminous
11
11
  galaxies are exponentially rare.
@@ -120,20 +120,18 @@ commands = [
120
120
  ]
121
121
 
122
122
  [tool.tox.env.docs]
123
- description = "Build docs with Sphinx and doctest"
123
+ description = "Build docs with Sphinx"
124
124
  extras = ["docs", "viz"]
125
125
  commands = [
126
126
  [
127
- "sphinx-apidoc",
128
- "-d", "2",
129
- "-o", "{tox_root}/docs/api",
130
- "{tox_root}/src/lfkit",
131
- "--separate",
132
- "--no-toc",
133
- "-f",
127
+ "rm",
128
+ "-rf",
129
+ "{tox_root}/docs/_build",
130
+ "{tox_root}/docs/api/generated",
134
131
  ],
135
132
  [
136
133
  "sphinx-build",
134
+ "-E",
137
135
  "-c", "{tox_root}/docs",
138
136
  "-b", "{posargs:html}",
139
137
  "{tox_root}/docs",
@@ -144,27 +142,18 @@ commands = [
144
142
 
145
143
  [tool.tox.env.do]
146
144
  description = "Run doctests + html build and open local docs"
147
- recreate = true
148
145
  extras = ["docs", "viz"]
149
146
  allowlist_externals = ["open", "rm"]
150
147
  commands = [
151
148
  [
152
149
  "rm",
153
150
  "-rf",
154
- "{tox_root}/docs/_build/doctest",
155
- "{tox_root}/docs/_build/html",
156
- ],
157
- [
158
- "sphinx-apidoc",
159
- "-d", "2",
160
- "-o", "{tox_root}/docs/api",
161
- "{tox_root}/src/lfkit",
162
- "--separate",
163
- "--no-toc",
164
- "-f",
151
+ "{tox_root}/docs/_build",
152
+ "{tox_root}/docs/api/generated",
165
153
  ],
166
154
  [
167
155
  "sphinx-build",
156
+ "-E",
168
157
  "-b", "doctest",
169
158
  "{tox_root}/docs",
170
159
  "{tox_root}/docs/_build/doctest",
@@ -172,6 +161,7 @@ commands = [
172
161
  ],
173
162
  [
174
163
  "sphinx-build",
164
+ "-E",
175
165
  "-b", "html",
176
166
  "{tox_root}/docs",
177
167
  "{tox_root}/docs/_build/html",
@@ -183,15 +173,13 @@ commands = [
183
173
  [tool.tox.env.docs-releases]
184
174
  description = "Build the documentation for lfkit releases using Sphinx"
185
175
  extras = ["docs", "viz"]
186
- allowlist_externals = ["cp"]
176
+ allowlist_externals = ["cp", "rm"]
187
177
  commands = [
188
178
  [
189
- "sphinx-apidoc",
190
- "-d", "2",
191
- "-o", "{tox_root}/docs/api",
192
- "{tox_root}/src/lfkit",
193
- "--separate",
194
- "-f",
179
+ "rm",
180
+ "-rf",
181
+ "{tox_root}/docs/_build",
182
+ "{tox_root}/docs/api/generated",
195
183
  ],
196
184
  [
197
185
  "sphinx-multiversion",
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.3.0'
22
- __version_tuple__ = version_tuple = (0, 3, 0)
21
+ __version__ = version = '0.5.0'
22
+ __version_tuple__ = version_tuple = (0, 5, 0)
23
23
 
24
- __commit_id__ = commit_id = 'gd79ca3a8b'
24
+ __commit_id__ = commit_id = 'g8dbb26ee5'
@@ -1,4 +1,4 @@
1
- """User-facing luminosity-function API namespaces."""
1
+ """User-facing luminosity function API namespaces."""
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -14,28 +14,43 @@ from lfkit.photometry import magnitudes as photo_magnitudes
14
14
 
15
15
 
16
16
  class LFIntegralsAPI:
17
- """Grouped API for luminosity function integrals."""
17
+ """Grouped API for luminosity function integrals.
18
+
19
+ Args:
20
+ lf: Luminosity function object whose callable form is used by bound
21
+ integral methods.
22
+ """
18
23
 
19
24
  def __init__(self, lf) -> None:
20
25
  self.lf = lf
21
26
 
22
27
 
23
28
  class LFCompletenessAPI:
24
- """Grouped API for catalog-completeness calculations."""
29
+ """Grouped API for catalog completeness calculations.
30
+
31
+ Args:
32
+ lf: Luminosity function object whose callable form is used by bound
33
+ completeness methods.
34
+ """
25
35
 
26
36
  def __init__(self, lf) -> None:
27
37
  self.lf = lf
28
38
 
29
39
 
30
40
  class LFRedshiftDensityAPI:
31
- """Grouped API for LF-weighted redshift-density calculations."""
41
+ """Grouped API for luminosity function weighted redshift density calculations.
42
+
43
+ Args:
44
+ lf: Luminosity function object whose callable form is used by bound
45
+ redshift density methods.
46
+ """
32
47
 
33
48
  def __init__(self, lf) -> None:
34
49
  self.lf = lf
35
50
 
36
51
 
37
52
  class LFMagnitudesAPI:
38
- """Grouped API for apparent- and absolute-magnitude conversions."""
53
+ """Grouped API for apparent magnitude and absolute magnitude conversions."""
39
54
 
40
55
 
41
56
  class LFLuminositiesAPI:
@@ -76,7 +91,20 @@ def expose_lf_function(
76
91
  lf_arg_position: int | None = None,
77
92
  lf_arg_name: str | None = None,
78
93
  ) -> Callable[..., Any]:
79
- """Expose a low-level LF function as a bound API method."""
94
+ """Expose a low level luminosity function helper as a bound API method.
95
+
96
+ Args:
97
+ function: Low level function to expose as a method.
98
+ lf_arg_position: Positional index where the luminosity function callable
99
+ should be inserted. If ``None``, no positional luminosity function
100
+ argument is inserted.
101
+ lf_arg_name: Keyword name used to pass the luminosity function callable.
102
+ If provided, this takes priority over ``lf_arg_position``.
103
+
104
+ Returns:
105
+ Bound method that injects ``self.lf._as_callable()`` before calling
106
+ ``function``.
107
+ """
80
108
 
81
109
  @wraps(function)
82
110
  def method(self, *args, **kwargs):
@@ -97,7 +125,14 @@ def expose_lf_function(
97
125
 
98
126
 
99
127
  def _public_functions(module: object) -> dict[str, Callable[..., Any]]:
100
- """Return callable public functions declared by a module."""
128
+ """Return callable public functions declared by a module.
129
+
130
+ Args:
131
+ module: Module object with an optional ``__all__`` declaration.
132
+
133
+ Returns:
134
+ Dictionary mapping public function names to callable objects.
135
+ """
101
136
  return {
102
137
  name: getattr(module, name)
103
138
  for name in getattr(module, "__all__", [])
@@ -106,13 +141,21 @@ def _public_functions(module: object) -> dict[str, Callable[..., Any]]:
106
141
 
107
142
 
108
143
  def _method_name(module: object, function_name: str) -> str:
109
- """Return API method name for a low-level function."""
144
+ """Return the API method name for a low level function.
145
+
146
+ Args:
147
+ module: Module object that may define ``__api_aliases__``.
148
+ function_name: Name of the low level function.
149
+
150
+ Returns:
151
+ Public API method name, using ``__api_aliases__`` when available.
152
+ """
110
153
  aliases = getattr(module, "__api_aliases__", {})
111
154
  return aliases.get(function_name, function_name)
112
155
 
113
156
 
114
157
  def _attach_api_methods() -> None:
115
- """Attach low-level functions to their API namespace classes."""
158
+ """Attach low level functions to their API namespace classes."""
116
159
  for api_cls, spec in _API_NAMESPACES.items():
117
160
  module = spec["module"]
118
161
  bound_to_lf = spec.get("bound_to_lf", False)
@@ -21,60 +21,61 @@ __all__ = ["ConditionalLuminosityFunction"]
21
21
  class ConditionalLuminosityFunction(LuminosityFunction):
22
22
  """User-facing wrapper for conditional luminosity function models.
23
23
 
24
- A conditional luminosity function evaluates ``Phi(M | x)``, where
25
- ``M`` is absolute magnitude and ``x`` is an external conditioning
26
- variable such as redshift, halo mass, or another model-specific quantity.
24
+ A conditional luminosity function evaluates ``Phi(M | x_1, x_2, ...)``,
25
+ where ``M`` is absolute magnitude and the ``x_i`` are external conditioning
26
+ variables such as redshift, halo mass, environment, richness, stellar mass,
27
+ or other model-specific quantities.
27
28
 
28
29
  Instances can be created either with the generic constructor or with
29
30
  automatically generated model constructors.
30
-
31
- Examples:
32
- >>> clf = ConditionalLuminosityFunction(
33
- ... model="schechter",
34
- ... parameters={"phi_star": 1e-3, "m_star": -20.5, "alpha": -1.1},
35
- ... )
36
- >>> phi = clf.phi(absolute_mag=-20.0, condition=0.5)
37
-
38
- >>> ConditionalLuminosityFunction.available_models()
39
31
  """
40
32
 
41
33
  def phi(
42
34
  self,
43
35
  absolute_mag: FloatInput,
44
- condition: FloatInput | None = None,
36
+ *conditions: FloatInput,
45
37
  ) -> FloatArray:
46
38
  """Evaluate the conditional luminosity function.
47
39
 
48
40
  Args:
49
41
  absolute_mag: Absolute magnitude value or array.
50
- condition: Conditioning variable value or array. The meaning of
51
- this variable depends on the selected conditional LF model.
42
+ *conditions: One or more conditioning variable values or arrays. The
43
+ meaning of each variable depends on the selected conditional
44
+ luminosity function model.
52
45
 
53
46
  Returns:
54
47
  Conditional luminosity function evaluated at ``absolute_mag`` and
55
- ``condition``.
48
+ the supplied conditioning variables.
56
49
 
57
50
  Raises:
58
- ValueError: If ``condition`` is not provided or the model is not
59
- registered as a conditional luminosity function.
51
+ ValueError: If no conditioning variables are provided, or if the
52
+ model is not registered as a conditional luminosity function.
60
53
  """
61
54
  model_spec = get_conditional_lf_model(self.model)
62
55
 
63
- if condition is None:
56
+ if not conditions:
64
57
  raise ValueError(
65
- f"condition is required for conditional luminosity function "
66
- f"model '{self.model}'."
58
+ f"At least one conditioning variable is required for conditional "
59
+ f"luminosity function model '{self.model}'."
67
60
  )
68
61
 
62
+ condition_arrays = tuple(
63
+ np.asarray(condition_value, dtype=float) for condition_value in conditions
64
+ )
65
+
69
66
  return model_spec.function(
70
67
  np.asarray(absolute_mag, dtype=float),
71
- np.asarray(condition, dtype=float),
68
+ *condition_arrays,
72
69
  **self.parameters_dict,
73
70
  )
74
71
 
75
72
  @staticmethod
76
73
  def available_models() -> list[str]:
77
- """Return conditional luminosity function model names."""
74
+ """Return registered conditional luminosity function model names.
75
+
76
+ Returns:
77
+ Sorted list of registered conditional luminosity function model names.
78
+ """
78
79
  return sorted(CONDITIONAL_LF_MODELS)
79
80
 
80
81
 
@@ -83,7 +84,15 @@ def _make_conditional_constructor(
83
84
  model_name: str,
84
85
  function: Any,
85
86
  ):
86
- """Create a classmethod constructor from a registered conditional LF model."""
87
+ """Create a classmethod constructor from a registered conditional model.
88
+
89
+ Args:
90
+ model_name: Name of the registered conditional luminosity function model.
91
+ function: Registered low level conditional luminosity function callable.
92
+
93
+ Returns:
94
+ Classmethod constructor for ``ConditionalLuminosityFunction``.
95
+ """
87
96
  signature = inspect.signature(function)
88
97
 
89
98
  @classmethod
@@ -106,22 +115,24 @@ def _make_conditional_constructor(
106
115
  constructor.__name__ = model_name
107
116
  constructor.__qualname__ = f"ConditionalLuminosityFunction.{model_name}"
108
117
  constructor.__doc__ = f"""Create a ``{model_name}`` conditional luminosity function.
109
-
110
- The keyword arguments are inferred from the registered low-level model
111
- function. Required model parameters must be supplied by the user. Optional
112
- model parameters use their low-level defaults unless explicitly provided.
113
-
114
- Args:
115
- meta: Optional metadata stored on the luminosity function object.
116
- **parameters: Parameters passed to the registered conditional LF model.
117
-
118
- Returns:
119
- ConditionalLuminosityFunction: Configured conditional luminosity function.
120
-
121
- Examples:
122
- >>> clf = ConditionalLuminosityFunction.{model_name}(...)
123
- >>> phi = clf.phi(absolute_mag=-20.0, condition=0.5)
124
- """
118
+
119
+ The keyword arguments are inferred from the registered low level model
120
+ function. Required model parameters must be supplied by the user. Optional
121
+ model parameters use their low level defaults unless explicitly provided.
122
+
123
+ Args:
124
+ meta: Optional metadata stored on the luminosity function object.
125
+ **parameters: Parameters passed to the registered conditional luminosity
126
+ function model.
127
+
128
+ Returns:
129
+ Configured conditional luminosity function.
130
+
131
+ Examples:
132
+ >>> clf = ConditionalLuminosityFunction.{model_name}(...)
133
+ >>> phi = clf.phi(-20.0, 0.5)
134
+ >>> phi = clf.phi(-20.0, halo_mass, redshift)
135
+ """
125
136
 
126
137
  return constructor
127
138
 
@@ -131,27 +142,40 @@ def _parameters_from_signature(
131
142
  signature: inspect.Signature,
132
143
  provided: Mapping[str, Any],
133
144
  ) -> dict[str, Any]:
134
- """Build stored parameters using function defaults plus user values.
145
+ """Build stored parameters from a function signature and user values.
135
146
 
136
- Independent variables such as ``absolute_mag`` and ``condition`` are not
137
- stored as model parameters. They are supplied later when calling
147
+ Independent variables such as ``absolute_mag`` and conditioning variables are
148
+ not stored as model parameters. They are supplied later when calling
138
149
  :meth:`ConditionalLuminosityFunction.phi`.
139
150
 
140
151
  Args:
141
- signature: Signature of the registered low-level conditional LF model.
152
+ signature: Signature of the registered low level conditional luminosity
153
+ function model.
142
154
  provided: User-supplied constructor keyword arguments.
143
155
 
144
156
  Returns:
145
- Dictionary of model parameters to store on the API object.
157
+ Dictionary of model parameters stored on the API object.
146
158
 
147
159
  Raises:
148
160
  TypeError: If the user provides a keyword that is not accepted by the
149
- registered low-level model function.
161
+ registered low level model function.
150
162
  """
151
163
  payload: dict[str, Any] = {}
152
164
 
165
+ independent_names = {
166
+ "absolute_mag",
167
+ "condition",
168
+ "conditions",
169
+ "z",
170
+ "redshift",
171
+ "x",
172
+ "halo_mass",
173
+ "environment",
174
+ "galaxy_type",
175
+ }
176
+
153
177
  for name, parameter in signature.parameters.items():
154
- if name in {"absolute_mag", "condition", "z", "redshift", "x"}:
178
+ if name in independent_names:
155
179
  continue
156
180
 
157
181
  if parameter.kind in {