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.
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/PKG-INFO +1 -1
- py_lfkit-0.2.0/docs/api/lfkit.api.conditional_luminosity_function.rst +7 -0
- py_lfkit-0.2.0/docs/api/lfkit.api.luminosity_function.rst +7 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.api.rst +2 -1
- py_lfkit-0.2.0/docs/api/lfkit.utils.integrators.rst +7 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.utils.rst +1 -0
- py_lfkit-0.2.0/docs/examples/api_overview.rst +553 -0
- py_lfkit-0.1.5/docs/examples/catalog_completeness_examples.rst → py_lfkit-0.2.0/docs/examples/catalog_completeness.rst +16 -28
- 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
- py_lfkit-0.2.0/docs/examples/index.rst +23 -0
- py_lfkit-0.2.0/docs/examples/luminosity_function_models.rst +626 -0
- py_lfkit-0.2.0/docs/examples/magnitude_integrals.rst +385 -0
- py_lfkit-0.2.0/docs/examples/magnitudes_and_luminosities.rst +211 -0
- py_lfkit-0.2.0/docs/examples/model_registry.rst +63 -0
- py_lfkit-0.2.0/docs/examples/redshift_density.rst +246 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/__init__.py +3 -1
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/_version.py +3 -3
- py_lfkit-0.2.0/src/lfkit/api/_clf_models.py +23 -0
- py_lfkit-0.2.0/src/lfkit/api/_completeness.py +51 -0
- py_lfkit-0.2.0/src/lfkit/api/_expose.py +45 -0
- py_lfkit-0.2.0/src/lfkit/api/_integrals.py +53 -0
- py_lfkit-0.2.0/src/lfkit/api/_lf_param_models.py +77 -0
- py_lfkit-0.2.0/src/lfkit/api/_luminosities.py +36 -0
- py_lfkit-0.2.0/src/lfkit/api/_magnitudes.py +27 -0
- py_lfkit-0.2.0/src/lfkit/api/_redshift_density.py +39 -0
- py_lfkit-0.2.0/src/lfkit/api/conditional_luminosity_function.py +161 -0
- py_lfkit-0.2.0/src/lfkit/api/luminosity_function.py +370 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/conditional_lf_models.py +7 -7
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/luminosity_function.py +11 -11
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/py_lfkit.egg-info/PKG-INFO +1 -1
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/py_lfkit.egg-info/SOURCES.txt +23 -6
- py_lfkit-0.2.0/tests/test_api_conditional_luminosity_function.py +192 -0
- py_lfkit-0.2.0/tests/test_api_luminosity_function.py +421 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_conditional_lf_models.py +13 -13
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_luminosity_function.py +20 -20
- py_lfkit-0.1.5/docs/api/lfkit.api.lumfunc.rst +0 -7
- py_lfkit-0.1.5/docs/examples/index.rst +0 -86
- py_lfkit-0.1.5/docs/examples/luminosity_function_examples.rst +0 -959
- py_lfkit-0.1.5/src/lfkit/api/lumfunc.py +0 -1109
- py_lfkit-0.1.5/tests/test_api_lumfunc.py +0 -1329
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/.github/workflows/ci.yml +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/.github/workflows/docs.yml +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/.github/workflows/publish.yml +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/.gitignore +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/CITATION.cff +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/LICENSE +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/MANIFEST.in +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/README.md +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/Makefile +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/_static/custom.css +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/_static/logos/lfkit_logo-icon.png +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/_static/logos/lfkit_logo.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/_static/logos/lfkit_logo.png +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/_static/logos/lfkit_logo.svg +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/_templates/pages_redirect.html +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/_templates/sidebar/brand.html +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/about/corr_overview.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/about/index.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/about/lf_overview.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/index.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.api.corrections.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.corrections.color_anchors.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.corrections.filters.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.corrections.kcorrect_backend.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.corrections.kcorrect_from_color.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.corrections.kcorrect_grids.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.corrections.poggianti1997.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.corrections.responses.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.corrections.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.cosmo.cosmology.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.cosmo.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.catalog_completeness.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.conditional_lf_integrals.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.conditional_lf_models.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.lf_integrals.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.lf_parameter_models.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.lf_redshift_density.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.luminosities.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.luminosity_function.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.magnitudes.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.photometry.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.utils.download_poggianti97_data.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.utils.evaluators.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.utils.interpolation.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.utils.io.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.utils.types.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.utils.units.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/api/lfkit.utils.validators.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/conf.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/examples/kcorrect_examples.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/examples/poggianti_examples.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/index.rst +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/docs/make.bat +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/logo/lfkit_github_banner.png +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/logo/lfkit_logo-icon.png +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/logo/lfkit_logo.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/logo/lfkit_logo.png +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/logo/lfkit_logo.svg +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/logo/make_gh_banner.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/logo/make_logo.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_B_type_E.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_B_type_E2.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_B_type_Sa.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_B_type_Sc.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_H_type_E.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_H_type_E2.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_H_type_Sa.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_H_type_Sc.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_I_type_E.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_I_type_E2.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_I_type_Sa.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_I_type_Sc.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_Ic_type_E.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_Ic_type_Sc.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_J_type_E.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_J_type_E2.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_J_type_Sa.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_J_type_Sc.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_K_type_E.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_K_type_E2.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_K_type_Sa.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_K_type_Sc.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_R_type_E.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_R_type_E2.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_R_type_Sa.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_R_type_Sc.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_Rc_type_E.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_Rc_type_Sc.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_U_type_E.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_U_type_E2.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_U_type_Sa.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_U_type_Sc.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_V_type_E.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_V_type_E2.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_V_type_Sa.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_V_type_Sc.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_g_type_E.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_g_type_E2.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_g_type_Sa.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/output/plots/poggianti1997/ke_pogg1997_band_g_type_Sc.pdf +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/pyproject.toml +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/scripts/compare_kcorr_surveys.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/scripts/compare_poggianti_to_kcorrect.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/scripts/make_fake_magnitude_limited_catalog.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/scripts/plot_poggianti1997_corrections.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/setup.cfg +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/api/__init__.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/api/corrections.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/corrections/__init__.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/corrections/color_anchors.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/corrections/filters.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/corrections/kcorrect_backend.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/corrections/kcorrect_from_color.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/corrections/kcorrect_grids.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/corrections/poggianti1997.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/corrections/responses.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/cosmo/__init__.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/cosmo/cosmology.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/demo_catalogs/fake_magnitude_limited_catalog.csv +0 -0
- {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
- {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
- {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
- {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
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/poggianti1997/__init__.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/poggianti1997/ecorr.csv +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/poggianti1997/filters.csv +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/poggianti1997/kcorr.csv +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/poggianti1997/kcorrv.csv +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/data/poggianti1997/sed.csv +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/__init__.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/catalog_completeness.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/conditional_lf_integrals.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/lf_integrals.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/lf_parameter_models.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/lf_redshift_density.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/luminosities.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/photometry/magnitudes.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/__init__.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/download_poggianti97_data.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/evaluators.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/integrators.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/interpolation.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/io.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/types.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/units.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/lfkit/utils/validators.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/py_lfkit.egg-info/dependency_links.txt +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/py_lfkit.egg-info/requires.txt +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/src/py_lfkit.egg-info/top_level.txt +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/benchmarks/test_cacciato_clf_reference.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/benchmarks/test_cacciato_hod_reference.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_api_corrections.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_corrections_color_anchors.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_corrections_filters.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_corrections_kcorrect_backend.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_corrections_kcorrect_from_color.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_corrections_kcorrrect_grids.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_corrections_poggianti1997.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_corrections_responses.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_cosmo_cosmology.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_completeness.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_completeness_fake_catalog.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_conditional_lf_integrals.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_lf_integrals.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_lf_parameter_models.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_lf_redshift_density.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_luminosities.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_photometry_magnitudes.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_utils_download_pogg97_data.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_utils_evaluators.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_utils_integrators.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_utils_interpolation.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_utils_io.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_utils_units.py +0 -0
- {py_lfkit-0.1.5 → py_lfkit-0.2.0}/tests/test_utils_validators.py +0 -0
|
@@ -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.
|