py-lfkit 0.1.5__tar.gz → 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/PKG-INFO +1 -1
  2. py_lfkit-0.2.0/docs/api/lfkit.api.conditional_luminosity_function.rst +7 -0
  3. py_lfkit-0.2.0/docs/api/lfkit.api.luminosity_function.rst +7 -0
  4. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.api.rst +2 -1
  5. py_lfkit-0.2.0/docs/api/lfkit.utils.integrators.rst +7 -0
  6. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.utils.rst +1 -0
  7. py_lfkit-0.2.0/docs/examples/api_overview.rst +553 -0
  8. py_lfkit-0.1.5/docs/examples/catalog_completeness_examples.rst → py_lfkit-0.2.0/docs/examples/catalog_completeness.rst +16 -28
  9. py_lfkit-0.1.5/docs/examples/conditional_luminosity_function_examples.rst → py_lfkit-0.2.0/docs/examples/conditional_luminosity_function.rst +228 -294
  10. py_lfkit-0.2.0/docs/examples/index.rst +23 -0
  11. py_lfkit-0.2.0/docs/examples/luminosity_function_models.rst +626 -0
  12. py_lfkit-0.2.0/docs/examples/magnitude_integrals.rst +385 -0
  13. py_lfkit-0.2.0/docs/examples/magnitudes_and_luminosities.rst +211 -0
  14. py_lfkit-0.2.0/docs/examples/model_registry.rst +63 -0
  15. py_lfkit-0.2.0/docs/examples/redshift_density.rst +246 -0
  16. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/__init__.py +3 -1
  17. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/_version.py +3 -3
  18. py_lfkit-0.2.0/src/lfkit/api/_clf_models.py +23 -0
  19. py_lfkit-0.2.0/src/lfkit/api/_completeness.py +51 -0
  20. py_lfkit-0.2.0/src/lfkit/api/_expose.py +45 -0
  21. py_lfkit-0.2.0/src/lfkit/api/_integrals.py +53 -0
  22. py_lfkit-0.2.0/src/lfkit/api/_lf_param_models.py +77 -0
  23. py_lfkit-0.2.0/src/lfkit/api/_luminosities.py +36 -0
  24. py_lfkit-0.2.0/src/lfkit/api/_magnitudes.py +27 -0
  25. py_lfkit-0.2.0/src/lfkit/api/_redshift_density.py +39 -0
  26. py_lfkit-0.2.0/src/lfkit/api/conditional_luminosity_function.py +161 -0
  27. py_lfkit-0.2.0/src/lfkit/api/luminosity_function.py +370 -0
  28. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/conditional_lf_models.py +7 -7
  29. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/luminosity_function.py +11 -11
  30. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/py_lfkit.egg-info/PKG-INFO +1 -1
  31. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/py_lfkit.egg-info/SOURCES.txt +23 -6
  32. py_lfkit-0.2.0/tests/test_api_conditional_luminosity_function.py +192 -0
  33. py_lfkit-0.2.0/tests/test_api_luminosity_function.py +421 -0
  34. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_conditional_lf_models.py +13 -13
  35. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_luminosity_function.py +20 -20
  36. py_lfkit-0.1.5/docs/api/lfkit.api.lumfunc.rst +0 -7
  37. py_lfkit-0.1.5/docs/examples/index.rst +0 -86
  38. py_lfkit-0.1.5/docs/examples/luminosity_function_examples.rst +0 -959
  39. py_lfkit-0.1.5/src/lfkit/api/lumfunc.py +0 -1109
  40. py_lfkit-0.1.5/tests/test_api_lumfunc.py +0 -1329
  41. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/.github/workflows/ci.yml +0 -0
  42. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/.github/workflows/docs.yml +0 -0
  43. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/.github/workflows/publish.yml +0 -0
  44. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/.gitignore +0 -0
  45. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/CITATION.cff +0 -0
  46. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/LICENSE +0 -0
  47. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/MANIFEST.in +0 -0
  48. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/README.md +0 -0
  49. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/Makefile +0 -0
  50. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/_static/custom.css +0 -0
  51. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/_static/logos/lfkit_logo-icon.png +0 -0
  52. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/_static/logos/lfkit_logo.pdf +0 -0
  53. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/_static/logos/lfkit_logo.png +0 -0
  54. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/_static/logos/lfkit_logo.svg +0 -0
  55. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/_templates/pages_redirect.html +0 -0
  56. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/_templates/sidebar/brand.html +0 -0
  57. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/about/corr_overview.rst +0 -0
  58. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/about/index.rst +0 -0
  59. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/about/lf_overview.rst +0 -0
  60. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/index.rst +0 -0
  61. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.api.corrections.rst +0 -0
  62. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.corrections.color_anchors.rst +0 -0
  63. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.corrections.filters.rst +0 -0
  64. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.corrections.kcorrect_backend.rst +0 -0
  65. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.corrections.kcorrect_from_color.rst +0 -0
  66. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.corrections.kcorrect_grids.rst +0 -0
  67. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.corrections.poggianti1997.rst +0 -0
  68. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.corrections.responses.rst +0 -0
  69. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.corrections.rst +0 -0
  70. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.cosmo.cosmology.rst +0 -0
  71. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.cosmo.rst +0 -0
  72. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.catalog_completeness.rst +0 -0
  73. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.conditional_lf_integrals.rst +0 -0
  74. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.conditional_lf_models.rst +0 -0
  75. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.lf_integrals.rst +0 -0
  76. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.lf_parameter_models.rst +0 -0
  77. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.lf_redshift_density.rst +0 -0
  78. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.luminosities.rst +0 -0
  79. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.luminosity_function.rst +0 -0
  80. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.magnitudes.rst +0 -0
  81. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.rst +0 -0
  82. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.rst +0 -0
  83. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.utils.download_poggianti97_data.rst +0 -0
  84. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.utils.evaluators.rst +0 -0
  85. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.utils.interpolation.rst +0 -0
  86. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.utils.io.rst +0 -0
  87. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.utils.types.rst +0 -0
  88. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.utils.units.rst +0 -0
  89. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.utils.validators.rst +0 -0
  90. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/conf.py +0 -0
  91. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/examples/kcorrect_examples.rst +0 -0
  92. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/examples/poggianti_examples.rst +0 -0
  93. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/index.rst +0 -0
  94. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/make.bat +0 -0
  95. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/logo/lfkit_github_banner.png +0 -0
  96. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/logo/lfkit_logo-icon.png +0 -0
  97. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/logo/lfkit_logo.pdf +0 -0
  98. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/logo/lfkit_logo.png +0 -0
  99. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/logo/lfkit_logo.svg +0 -0
  100. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/logo/make_gh_banner.py +0 -0
  101. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/logo/make_logo.py +0 -0
  102. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-g__blue-red__surveys-native-gr.pdf +0 -0
  103. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-g__blue-red__surveys-native-gr.png +0 -0
  104. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-i__blue-red__surveys-native-gr.pdf +0 -0
  105. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-i__blue-red__surveys-native-gr.png +0 -0
  106. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-r__blue-red__surveys-native-gr.pdf +0 -0
  107. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-r__blue-red__surveys-native-gr.png +0 -0
  108. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-u__blue-red__surveys-native-gr.pdf +0 -0
  109. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-u__blue-red__surveys-native-gr.png +0 -0
  110. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-z__blue-red__surveys-native-gr.pdf +0 -0
  111. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/compare_kcorrect_surveys_color_split/kcorr__band-z__blue-red__surveys-native-gr.png +0 -0
  112. {py_lfkit-0.1.5 → py_lfkit-0.2.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
  113. {py_lfkit-0.1.5 → py_lfkit-0.2.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
  114. {py_lfkit-0.1.5 → py_lfkit-0.2.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
  115. {py_lfkit-0.1.5 → py_lfkit-0.2.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
  116. {py_lfkit-0.1.5 → py_lfkit-0.2.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
  117. {py_lfkit-0.1.5 → py_lfkit-0.2.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
  118. {py_lfkit-0.1.5 → py_lfkit-0.2.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
  119. {py_lfkit-0.1.5 → py_lfkit-0.2.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
  120. {py_lfkit-0.1.5 → py_lfkit-0.2.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
  121. {py_lfkit-0.1.5 → py_lfkit-0.2.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
  122. {py_lfkit-0.1.5 → py_lfkit-0.2.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
  123. {py_lfkit-0.1.5 → py_lfkit-0.2.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
  124. {py_lfkit-0.1.5 → py_lfkit-0.2.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
  125. {py_lfkit-0.1.5 → py_lfkit-0.2.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
  126. {py_lfkit-0.1.5 → py_lfkit-0.2.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
  127. {py_lfkit-0.1.5 → py_lfkit-0.2.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
  128. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__bessell__z0.0000_4.0__Nz801__bsnone/K__band_bessell_B.pdf +0 -0
  129. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__bessell__z0.0000_4.0__Nz801__bsnone/K__band_bessell_I.pdf +0 -0
  130. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__bessell__z0.0000_4.0__Nz801__bsnone/K__band_bessell_R.pdf +0 -0
  131. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__bessell__z0.0000_4.0__Nz801__bsnone/K__band_bessell_U.pdf +0 -0
  132. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__bessell__z0.0000_4.0__Nz801__bsnone/K__band_bessell_V.pdf +0 -0
  133. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__decam__z0.0000_4.0__Nz801__bsnone/K__band_decam_Y.pdf +0 -0
  134. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__decam__z0.0000_4.0__Nz801__bsnone/K__band_decam_g.pdf +0 -0
  135. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__decam__z0.0000_4.0__Nz801__bsnone/K__band_decam_i.pdf +0 -0
  136. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__decam__z0.0000_4.0__Nz801__bsnone/K__band_decam_r.pdf +0 -0
  137. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__decam__z0.0000_4.0__Nz801__bsnone/K__band_decam_u.pdf +0 -0
  138. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__decam__z0.0000_4.0__Nz801__bsnone/K__band_decam_z.pdf +0 -0
  139. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__sdss__z0.0000_4.0__Nz801__bsnone/K__band_sdss_g0.pdf +0 -0
  140. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__sdss__z0.0000_4.0__Nz801__bsnone/K__band_sdss_i0.pdf +0 -0
  141. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__sdss__z0.0000_4.0__Nz801__bsnone/K__band_sdss_r0.pdf +0 -0
  142. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__sdss__z0.0000_4.0__Nz801__bsnone/K__band_sdss_u0.pdf +0 -0
  143. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__sdss__z0.0000_4.0__Nz801__bsnone/K__band_sdss_z0.pdf +0 -0
  144. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone/K__band_subaru_suprimecam_B.pdf +0 -0
  145. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone/K__band_subaru_suprimecam_Ic.pdf +0 -0
  146. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone/K__band_subaru_suprimecam_Rc.pdf +0 -0
  147. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone/K__band_subaru_suprimecam_V.pdf +0 -0
  148. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone/K__band_subaru_suprimecam_g.pdf +0 -0
  149. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone/K__band_subaru_suprimecam_i.pdf +0 -0
  150. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone/K__band_subaru_suprimecam_r.pdf +0 -0
  151. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/kcorrect/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone/K__band_subaru_suprimecam_z.pdf +0 -0
  152. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_B_type_E.pdf +0 -0
  153. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_B_type_E2.pdf +0 -0
  154. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_B_type_Sa.pdf +0 -0
  155. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_B_type_Sc.pdf +0 -0
  156. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_H_type_E.pdf +0 -0
  157. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_H_type_E2.pdf +0 -0
  158. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_H_type_Sa.pdf +0 -0
  159. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_H_type_Sc.pdf +0 -0
  160. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_I_type_E.pdf +0 -0
  161. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_I_type_E2.pdf +0 -0
  162. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_I_type_Sa.pdf +0 -0
  163. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_I_type_Sc.pdf +0 -0
  164. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_Ic_type_E.pdf +0 -0
  165. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_Ic_type_Sc.pdf +0 -0
  166. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_J_type_E.pdf +0 -0
  167. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_J_type_E2.pdf +0 -0
  168. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_J_type_Sa.pdf +0 -0
  169. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_J_type_Sc.pdf +0 -0
  170. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_K_type_E.pdf +0 -0
  171. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_K_type_E2.pdf +0 -0
  172. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_K_type_Sa.pdf +0 -0
  173. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_K_type_Sc.pdf +0 -0
  174. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_R_type_E.pdf +0 -0
  175. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_R_type_E2.pdf +0 -0
  176. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_R_type_Sa.pdf +0 -0
  177. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_R_type_Sc.pdf +0 -0
  178. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_Rc_type_E.pdf +0 -0
  179. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_Rc_type_Sc.pdf +0 -0
  180. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_U_type_E.pdf +0 -0
  181. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_U_type_E2.pdf +0 -0
  182. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_U_type_Sa.pdf +0 -0
  183. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_U_type_Sc.pdf +0 -0
  184. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_V_type_E.pdf +0 -0
  185. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_V_type_E2.pdf +0 -0
  186. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_V_type_Sa.pdf +0 -0
  187. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_V_type_Sc.pdf +0 -0
  188. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_g_type_E.pdf +0 -0
  189. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_g_type_E2.pdf +0 -0
  190. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_g_type_Sa.pdf +0 -0
  191. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_g_type_Sc.pdf +0 -0
  192. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/pyproject.toml +0 -0
  193. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/scripts/compare_kcorr_surveys.py +0 -0
  194. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/scripts/compare_poggianti_to_kcorrect.py +0 -0
  195. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/scripts/make_fake_magnitude_limited_catalog.py +0 -0
  196. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/scripts/plot_poggianti1997_corrections.py +0 -0
  197. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/setup.cfg +0 -0
  198. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/api/__init__.py +0 -0
  199. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/api/corrections.py +0 -0
  200. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/corrections/__init__.py +0 -0
  201. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/corrections/color_anchors.py +0 -0
  202. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/corrections/filters.py +0 -0
  203. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/corrections/kcorrect_backend.py +0 -0
  204. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/corrections/kcorrect_from_color.py +0 -0
  205. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/corrections/kcorrect_grids.py +0 -0
  206. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/corrections/poggianti1997.py +0 -0
  207. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/corrections/responses.py +0 -0
  208. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/cosmo/__init__.py +0 -0
  209. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/cosmo/cosmology.py +0 -0
  210. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/demo_catalogs/fake_magnitude_limited_catalog.csv +0 -0
  211. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/kcorrect/grids/kcorrect__bessell__z0.0000_4.0__Nz801__bsnone.npz +0 -0
  212. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/kcorrect/grids/kcorrect__decam__z0.0000_4.0__Nz801__bsnone.npz +0 -0
  213. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/kcorrect/grids/kcorrect__sdss__z0.0000_4.0__Nz801__bsnone.npz +0 -0
  214. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/kcorrect/grids/kcorrect__subaru_suprimecam__z0.0000_4.0__Nz801__bsnone.npz +0 -0
  215. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/poggianti1997/__init__.py +0 -0
  216. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/poggianti1997/ecorr.csv +0 -0
  217. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/poggianti1997/filters.csv +0 -0
  218. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/poggianti1997/kcorr.csv +0 -0
  219. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/poggianti1997/kcorrv.csv +0 -0
  220. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/poggianti1997/sed.csv +0 -0
  221. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/__init__.py +0 -0
  222. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/catalog_completeness.py +0 -0
  223. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/conditional_lf_integrals.py +0 -0
  224. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/lf_integrals.py +0 -0
  225. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/lf_parameter_models.py +0 -0
  226. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/lf_redshift_density.py +0 -0
  227. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/luminosities.py +0 -0
  228. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/magnitudes.py +0 -0
  229. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/__init__.py +0 -0
  230. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/download_poggianti97_data.py +0 -0
  231. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/evaluators.py +0 -0
  232. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/integrators.py +0 -0
  233. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/interpolation.py +0 -0
  234. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/io.py +0 -0
  235. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/types.py +0 -0
  236. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/units.py +0 -0
  237. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/validators.py +0 -0
  238. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/py_lfkit.egg-info/dependency_links.txt +0 -0
  239. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/py_lfkit.egg-info/requires.txt +0 -0
  240. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/py_lfkit.egg-info/top_level.txt +0 -0
  241. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/benchmarks/test_cacciato_clf_reference.py +0 -0
  242. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/benchmarks/test_cacciato_hod_reference.py +0 -0
  243. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_api_corrections.py +0 -0
  244. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_corrections_color_anchors.py +0 -0
  245. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_corrections_filters.py +0 -0
  246. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_corrections_kcorrect_backend.py +0 -0
  247. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_corrections_kcorrect_from_color.py +0 -0
  248. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_corrections_kcorrrect_grids.py +0 -0
  249. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_corrections_poggianti1997.py +0 -0
  250. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_corrections_responses.py +0 -0
  251. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_cosmo_cosmology.py +0 -0
  252. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_completeness.py +0 -0
  253. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_completeness_fake_catalog.py +0 -0
  254. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_conditional_lf_integrals.py +0 -0
  255. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_lf_integrals.py +0 -0
  256. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_lf_parameter_models.py +0 -0
  257. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_lf_redshift_density.py +0 -0
  258. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_luminosities.py +0 -0
  259. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_magnitudes.py +0 -0
  260. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_utils_download_pogg97_data.py +0 -0
  261. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_utils_evaluators.py +0 -0
  262. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_utils_integrators.py +0 -0
  263. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_utils_interpolation.py +0 -0
  264. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_utils_io.py +0 -0
  265. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_utils_units.py +0 -0
  266. {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_utils_validators.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: py-lfkit
3
- Version: 0.1.5
3
+ Version: 0.2.0
4
4
  Summary: Luminosity functions and photometric corrections toolkit.
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -0,0 +1,7 @@
1
+ lfkit.api.conditional\_luminosity\_function module
2
+ ==================================================
3
+
4
+ .. automodule:: lfkit.api.conditional_luminosity_function
5
+ :members:
6
+ :show-inheritance:
7
+ :undoc-members:
@@ -0,0 +1,7 @@
1
+ lfkit.api.luminosity\_function module
2
+ =====================================
3
+
4
+ .. automodule:: lfkit.api.luminosity_function
5
+ :members:
6
+ :show-inheritance:
7
+ :undoc-members:
@@ -7,8 +7,9 @@ Submodules
7
7
  .. toctree::
8
8
  :maxdepth: 2
9
9
 
10
+ lfkit.api.conditional_luminosity_function
10
11
  lfkit.api.corrections
11
- lfkit.api.lumfunc
12
+ lfkit.api.luminosity_function
12
13
 
13
14
  Module contents
14
15
  ---------------
@@ -0,0 +1,7 @@
1
+ lfkit.utils.integrators module
2
+ ==============================
3
+
4
+ .. automodule:: lfkit.utils.integrators
5
+ :members:
6
+ :show-inheritance:
7
+ :undoc-members:
@@ -9,6 +9,7 @@ Submodules
9
9
 
10
10
  lfkit.utils.download_poggianti97_data
11
11
  lfkit.utils.evaluators
12
+ lfkit.utils.integrators
12
13
  lfkit.utils.interpolation
13
14
  lfkit.utils.io
14
15
  lfkit.utils.types
@@ -0,0 +1,553 @@
1
+ .. |lfkitlogo| image:: /_static/logos/lfkit_logo-icon.png
2
+ :alt: LFKit logo
3
+ :width: 50px
4
+
5
+ |lfkitlogo| API overview
6
+ ========================
7
+
8
+ This page gives a high-level overview of how LFKit's public API is organized.
9
+
10
+ LFKit is built around a small number of user-facing entry points. The goal is
11
+ that most users should not need to import low-level functions from
12
+ ``lfkit.photometry`` directly. Instead, they can start from the public API
13
+ objects and use grouped namespaces for related calculations.
14
+
15
+ The main API areas are:
16
+
17
+ * luminosity function models,
18
+ * conditional luminosity function models,
19
+ * luminosity function integrals,
20
+ * magnitude-limited completeness,
21
+ * LF-weighted redshift-density calculations,
22
+ * magnitude and luminosity conversions,
23
+ * photometric corrections.
24
+
25
+ The detailed examples are split across separate pages. This page is only a map
26
+ of the public API and the intended workflow.
27
+
28
+
29
+ Main entry points
30
+ -----------------
31
+
32
+ The most important public objects are imported from :mod:`lfkit`:
33
+
34
+ .. code-block:: python
35
+
36
+ from lfkit import LuminosityFunction
37
+ from lfkit import Corrections
38
+
39
+ If conditional luminosity functions are exposed through a separate public class,
40
+ the intended import should be:
41
+
42
+ .. code-block:: python
43
+
44
+ from lfkit import ConditionalLuminosityFunction
45
+
46
+ The public API is organized so that users first create a model object and then
47
+ call grouped methods from that object.
48
+
49
+ For example, a standard luminosity function workflow starts with:
50
+
51
+ .. code-block:: python
52
+
53
+ from lfkit import LuminosityFunction
54
+
55
+ lf = LuminosityFunction.schechter(
56
+ phi_star=1.0e-3,
57
+ m_star=-20.5,
58
+ alpha=-1.1,
59
+ )
60
+
61
+ phi = lf.phi(-20.0)
62
+
63
+ The object ``lf`` stores the chosen luminosity function model and exposes
64
+ namespaces for common calculations.
65
+
66
+
67
+ Luminosity-function API
68
+ -----------------------
69
+
70
+ The :class:`lfkit.LuminosityFunction` object is the main interface for ordinary
71
+ luminosity function models.
72
+
73
+ It provides constructors for supported LF parameterizations, for example:
74
+
75
+ .. code-block:: python
76
+
77
+ lf = LuminosityFunction.schechter(
78
+ phi_star=1.0e-3,
79
+ m_star=-20.5,
80
+ alpha=-1.1,
81
+ )
82
+
83
+ lf = LuminosityFunction.double_schechter(
84
+ phi_star=1.0e-3,
85
+ m_star=-20.5,
86
+ alpha=-1.1,
87
+ beta=-1.5,
88
+ m_transition=-19.5,
89
+ )
90
+
91
+ lf = LuminosityFunction.evolving_schechter(
92
+ phi_model="linear_p",
93
+ phi_kwargs={"phi_0_star": 1.0e-3, "p": 0.7},
94
+ m_star_model="linear_q",
95
+ m_star_kwargs={"m_0_star": -20.5, "q": 0.8, "z_ref": 0.1},
96
+ alpha_model="constant",
97
+ alpha_kwargs={"alpha": -1.1},
98
+ )
99
+
100
+ Once created, the object can evaluate the luminosity function:
101
+
102
+ .. code-block:: python
103
+
104
+ phi = lf.phi(absolute_mag)
105
+
106
+ For evolving models, pass redshift as well:
107
+
108
+ .. code-block:: python
109
+
110
+ phi = lf.phi(absolute_mag, redshift)
111
+
112
+ The same object can also expose the redshift-dependent parameters:
113
+
114
+ .. code-block:: python
115
+
116
+ phi_star, m_star, alpha = lf.parameters(redshift)
117
+
118
+
119
+ Grouped namespaces
120
+ ------------------
121
+
122
+ A :class:`lfkit.LuminosityFunction` object groups related functionality into
123
+ small namespaces.
124
+
125
+ The main namespaces are:
126
+
127
+ .. list-table::
128
+ :header-rows: 1
129
+ :widths: 25 55 20
130
+
131
+ * - Namespace
132
+ - Purpose
133
+ - Example
134
+ * - ``lf.integrals``
135
+ - Magnitude integrals of the bound luminosity function.
136
+ - ``lf.integrals.number_density(...)``
137
+ * - ``lf.redshift_density``
138
+ - Magnitude-limited and volume-weighted redshift-density calculations.
139
+ - ``lf.redshift_density.weighted(...)``
140
+ * - ``lf.completeness``
141
+ - Magnitude-limited catalog completeness and missing fractions.
142
+ - ``lf.completeness.catalog_fraction(...)``
143
+ * - ``lf.magnitudes``
144
+ - Apparent/absolute magnitude and distance-modulus helpers.
145
+ - ``lf.magnitudes.absolute_from_luminosity_distance(...)``
146
+ * - ``lf.luminosities``
147
+ - Luminosity-ratio and Schechter helper functions.
148
+ - ``lf.luminosities.ratio_from_magnitudes(...)``
149
+
150
+ This keeps the public API readable. Users can discover functionality from the
151
+ model object without needing to remember which low-level module contains each
152
+ calculation.
153
+
154
+
155
+ Magnitude integrals
156
+ -------------------
157
+
158
+ The ``integrals`` namespace evaluates integrals over absolute magnitude for the
159
+ luminosity function stored in ``lf``.
160
+
161
+ Typical methods include number density, luminosity density, mean luminosity,
162
+ and selection-weighted number density.
163
+
164
+ .. code-block:: python
165
+
166
+ number_density = lf.integrals.number_density(
167
+ redshift,
168
+ m_bright=-24.0,
169
+ m_faint=-16.0,
170
+ n_m=800,
171
+ )
172
+
173
+ luminosity_density = lf.integrals.luminosity_density(
174
+ redshift,
175
+ m_bright=-24.0,
176
+ m_faint=-16.0,
177
+ n_m=800,
178
+ )
179
+
180
+ mean_luminosity = lf.integrals.mean_luminosity(
181
+ redshift,
182
+ m_bright=-24.0,
183
+ m_faint=-16.0,
184
+ n_m=800,
185
+ )
186
+
187
+ Selection weights can be supplied through a callable:
188
+
189
+ .. code-block:: python
190
+
191
+ def selection_fn(absolute_mag, z):
192
+ limiting_mag = -18.5 - 1.2 * z
193
+ width = 0.35
194
+ return 1.0 / (1.0 + np.exp((absolute_mag - limiting_mag) / width))
195
+
196
+ selected_density = lf.integrals.selection_weighted_number_density(
197
+ redshift,
198
+ selection_fn=selection_fn,
199
+ m_bright=-24.0,
200
+ m_faint=-14.0,
201
+ n_m=800,
202
+ )
203
+
204
+ The luminosity function callable is inserted internally by the API, so users
205
+ only provide the redshift grid, magnitude bounds, and optional selection
206
+ function.
207
+
208
+
209
+ Completeness calculations
210
+ -------------------------
211
+
212
+ The ``completeness`` namespace handles magnitude-limited catalog calculations.
213
+
214
+ These methods are useful when a survey has an apparent-magnitude limit
215
+ ``m_lim`` and the user wants to know which part of the intrinsic luminosity
216
+ function is visible at each redshift.
217
+
218
+ Typical quantities are:
219
+
220
+ .. code-block:: python
221
+
222
+ observed = lf.completeness.observed_number_density(
223
+ cosmo,
224
+ redshift,
225
+ m_lim=24.0,
226
+ m_bright=-24.0,
227
+ m_faint=-16.0,
228
+ n_m=800,
229
+ h=0.7,
230
+ )
231
+
232
+ missing = lf.completeness.missing_number_density(
233
+ cosmo,
234
+ redshift,
235
+ m_lim=24.0,
236
+ m_bright=-24.0,
237
+ m_faint=-16.0,
238
+ n_m=800,
239
+ h=0.7,
240
+ )
241
+
242
+ catalog_fraction = lf.completeness.catalog_fraction(
243
+ cosmo,
244
+ redshift,
245
+ m_lim=24.0,
246
+ m_bright=-24.0,
247
+ m_faint=-16.0,
248
+ n_m=800,
249
+ h=0.7,
250
+ )
251
+
252
+ out_of_catalog_fraction = lf.completeness.out_of_catalog_fraction(
253
+ cosmo,
254
+ redshift,
255
+ m_lim=24.0,
256
+ m_bright=-24.0,
257
+ m_faint=-16.0,
258
+ n_m=800,
259
+ h=0.7,
260
+ )
261
+
262
+ The same namespace also exposes the absolute-magnitude limit implied by an
263
+ apparent-magnitude cut:
264
+
265
+ .. code-block:: python
266
+
267
+ m_limit = lf.completeness.absolute_magnitude_limit(
268
+ cosmo,
269
+ redshift,
270
+ m_lim=24.0,
271
+ h=0.7,
272
+ )
273
+
274
+ This is often the first diagnostic to check before interpreting completeness
275
+ fractions.
276
+
277
+
278
+ Redshift-density calculations
279
+ -----------------------------
280
+
281
+ The ``redshift_density`` namespace is for building LF-weighted redshift trends.
282
+
283
+ These methods are useful when LFKit is used as an ingredient in survey
284
+ forecasting or tomography construction.
285
+
286
+ A magnitude-limited number density can be computed with:
287
+
288
+ .. code-block:: python
289
+
290
+ number_density = lf.redshift_density.integrated_number_density(
291
+ redshift,
292
+ m_lim=24.0,
293
+ m_bright=-24.0,
294
+ luminosity_distance_mpc_fn=luminosity_distance_mpc,
295
+ n_m=800,
296
+ )
297
+
298
+ A volume-weighted redshift trend can be computed with:
299
+
300
+ .. code-block:: python
301
+
302
+ weighted_density = lf.redshift_density.weighted(
303
+ redshift,
304
+ m_lim=24.0,
305
+ m_bright=-24.0,
306
+ luminosity_distance_mpc_fn=luminosity_distance_mpc,
307
+ volume_weight_fn=volume_weight,
308
+ n_m=800,
309
+ )
310
+
311
+ Here ``luminosity_distance_mpc_fn`` and ``volume_weight_fn`` are callables
312
+ supplied by the user or by another cosmology package.
313
+
314
+ This design keeps LFKit independent of one specific cosmology backend for these
315
+ generic redshift-density utilities.
316
+
317
+
318
+ Magnitude and luminosity helpers
319
+ --------------------------------
320
+
321
+ The ``magnitudes`` namespace provides public helpers for converting between
322
+ apparent magnitude, absolute magnitude, and luminosity distance.
323
+
324
+ For example:
325
+
326
+ .. code-block:: python
327
+
328
+ absolute_mag = lf.magnitudes.absolute_from_luminosity_distance(
329
+ apparent_mag,
330
+ luminosity_distance_mpc,
331
+ )
332
+
333
+ apparent_mag = lf.magnitudes.apparent_from_luminosity_distance(
334
+ absolute_mag,
335
+ luminosity_distance_mpc,
336
+ )
337
+
338
+ The ``luminosities`` namespace provides luminosity-ratio helpers:
339
+
340
+ .. code-block:: python
341
+
342
+ luminosity_ratio = lf.luminosities.ratio_from_magnitudes(
343
+ absolute_mag,
344
+ m_star,
345
+ )
346
+
347
+ These helpers are useful for diagnostics, selection functions, and examples
348
+ where the user wants to inspect the magnitude-luminosity mapping directly.
349
+
350
+
351
+ Conditional luminosity function API
352
+ -----------------------------------
353
+
354
+ Conditional luminosity functions describe luminosity distributions conditioned
355
+ on another variable, usually halo mass.
356
+
357
+ They should be kept conceptually separate from ordinary luminosity functions.
358
+ A conditional luminosity function object should be responsible for CLF models,
359
+ while :class:`lfkit.LuminosityFunction` remains responsible for ordinary LF
360
+ models.
361
+
362
+ A typical CLF workflow should look like:
363
+
364
+ .. code-block:: python
365
+
366
+ clf = ConditionalLuminosityFunction.schechter(
367
+ phi_star=1.0,
368
+ l_star=1.0e10,
369
+ alpha=-1.1,
370
+ )
371
+
372
+ phi = clf.phi(luminosity, halo_mass)
373
+
374
+ or, for magnitude-based CLF models:
375
+
376
+ .. code-block:: python
377
+
378
+ phi = clf.phi(absolute_mag, halo_mass)
379
+
380
+ The detailed CLF examples should live on a separate page. This overview page
381
+ only records the architectural boundary:
382
+
383
+ * ordinary LF models belong to ``LuminosityFunction``,
384
+ * conditional LF models belong to ``ConditionalLuminosityFunction``,
385
+ * shared numerical helpers should stay in lower-level utility modules,
386
+ * the public API should avoid duplicating the low-level model code.
387
+
388
+
389
+ Photometric corrections
390
+ -----------------------
391
+
392
+ Photometric corrections are exposed separately through :class:`lfkit.Corrections`.
393
+
394
+ This keeps corrections independent from the luminosity function model itself.
395
+ Users can construct or evaluate corrections and then pass them into magnitude,
396
+ completeness, or redshift-density calculations when needed.
397
+
398
+ For example, correction callables can be passed into LF calculations that need
399
+ k-corrections or evolution corrections:
400
+
401
+ .. code-block:: python
402
+
403
+ number_density = lf.redshift_density.integrated_number_density(
404
+ redshift,
405
+ m_lim=24.0,
406
+ m_bright=-24.0,
407
+ luminosity_distance_mpc_fn=luminosity_distance_mpc,
408
+ k_correction_fn=k_correction,
409
+ e_correction_fn=e_correction,
410
+ n_m=800,
411
+ )
412
+
413
+ The sign convention used by the magnitude helpers is:
414
+
415
+ .. math::
416
+
417
+ M = m - \mu - K + E,
418
+
419
+ and equivalently,
420
+
421
+ .. math::
422
+
423
+ m = M + \mu + K - E.
424
+
425
+ This means that corrections can be supplied without hard-coding one correction
426
+ backend into the luminosity function API.
427
+
428
+
429
+ Available models
430
+ ----------------
431
+
432
+ The API can report which models are registered.
433
+
434
+ For luminosity function models:
435
+
436
+ .. code-block:: python
437
+
438
+ from lfkit import LuminosityFunction
439
+
440
+ LuminosityFunction.available_models()
441
+ LuminosityFunction.available_from_m_models()
442
+ LuminosityFunction.available_parameter_models()
443
+
444
+ For conditional luminosity function models, the matching API should be:
445
+
446
+ .. code-block:: python
447
+
448
+ from lfkit import ConditionalLuminosityFunction
449
+
450
+ ConditionalLuminosityFunction.available_models()
451
+
452
+ These discovery methods are useful in examples, notebooks, and validation
453
+ scripts.
454
+
455
+
456
+ Recommended example-page split
457
+ ------------------------------
458
+
459
+ The detailed examples should stay split by topic rather than collected into one
460
+ large page.
461
+
462
+ A useful organization is:
463
+
464
+ .. list-table::
465
+ :header-rows: 1
466
+ :widths: 28 52
467
+
468
+ * - Page
469
+ - Contents
470
+ * - ``api_overview``
471
+ - High-level organization of the public API.
472
+ * - ``luminosity_function_examples``
473
+ - Basic LF models, model comparison, evolving parameters, and LF surfaces.
474
+ * - ``conditional_luminosity_function_examples``
475
+ - CLF models and halo-mass-dependent luminosity distributions.
476
+ * - ``magnitude_integrals``
477
+ - Number density, luminosity density, mean luminosity, and selection-weighted integrals.
478
+ * - ``magnitudes_and_luminosities``
479
+ - Magnitude conversions, luminosity-distance helpers, and luminosity-ratio helpers.
480
+ * - ``catalog_completeness_examples``
481
+ - Observed/missing number densities and catalog fractions.
482
+ * - ``redshift_density``
483
+ - Magnitude-limited and volume-weighted LF redshift trends.
484
+ * - ``kcorrect_examples``
485
+ - Examples using the kcorrect backend.
486
+ * - ``poggianti_examples``
487
+ - Examples using Poggianti correction tables.
488
+ * - ``model_registry``
489
+ - Registered models and how to inspect them.
490
+
491
+ This keeps each page small enough to read and maintain.
492
+
493
+
494
+ Which API should I use?
495
+ -----------------------
496
+
497
+ Use :class:`lfkit.LuminosityFunction` when you want to evaluate or integrate an
498
+ ordinary luminosity function:
499
+
500
+ .. code-block:: python
501
+
502
+ lf = LuminosityFunction.schechter(...)
503
+ phi = lf.phi(...)
504
+ number_density = lf.integrals.number_density(...)
505
+
506
+ Use the ``completeness`` namespace when a survey apparent-magnitude limit is
507
+ part of the calculation:
508
+
509
+ .. code-block:: python
510
+
511
+ fraction = lf.completeness.catalog_fraction(...)
512
+
513
+ Use the ``redshift_density`` namespace when constructing an LF-weighted
514
+ redshift trend:
515
+
516
+ .. code-block:: python
517
+
518
+ nz = lf.redshift_density.weighted(...)
519
+
520
+ Use the ``magnitudes`` and ``luminosities`` namespaces for conversions and
521
+ diagnostics:
522
+
523
+ .. code-block:: python
524
+
525
+ m_abs = lf.magnitudes.absolute_from_luminosity_distance(...)
526
+ l_ratio = lf.luminosities.ratio_from_magnitudes(...)
527
+
528
+ Use :class:`lfkit.Corrections` when constructing or evaluating photometric
529
+ corrections.
530
+
531
+ Use ``ConditionalLuminosityFunction`` when the model is conditional on halo mass
532
+ or another external variable.
533
+
534
+
535
+ Design principle
536
+ ----------------
537
+
538
+ The public API should be thin and user-facing.
539
+
540
+ Low-level modules should contain the numerical implementation. Public API
541
+ classes should organize those functions into discoverable workflows without
542
+ duplicating the underlying model code.
543
+
544
+ In practice, this means:
545
+
546
+ * model constructors store the selected model and parameters,
547
+ * bound namespaces inject the stored LF callable automatically,
548
+ * correction callables are passed explicitly where needed,
549
+ * low-level functions remain available for specialist use,
550
+ * examples should use the public API wherever possible.
551
+
552
+ This keeps the docs readable while preserving the flexibility of the underlying
553
+ photometry modules.