{"id":17192393,"url":"https://github.com/bd-j/prospector","last_synced_at":"2026-04-09T00:02:07.152Z","repository":{"id":8797267,"uuid":"10490445","full_name":"bd-j/prospector","owner":"bd-j","description":"Python code for Stellar Population Inference from Spectra and SEDs","archived":false,"fork":false,"pushed_at":"2026-01-28T17:56:07.000Z","size":38179,"stargazers_count":175,"open_issues_count":39,"forks_count":84,"subscribers_count":22,"default_branch":"main","last_synced_at":"2026-01-29T08:29:06.672Z","etag":null,"topics":["fitting","stellar-population-properties"],"latest_commit_sha":null,"homepage":"http://prospect.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bd-j.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.rst","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.rst","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2013-06-04T22:47:00.000Z","updated_at":"2026-01-28T17:56:19.000Z","dependencies_parsed_at":"2023-02-13T01:01:19.743Z","dependency_job_id":"401d45f2-7e06-46da-beb7-943e99c17519","html_url":"https://github.com/bd-j/prospector","commit_stats":{"total_commits":839,"total_committers":15,"mean_commits":55.93333333333333,"dds":0.1430274135876043,"last_synced_commit":"931b4adb7bff56f710e1f31b23bb61524ed81f26"},"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/bd-j/prospector","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bd-j%2Fprospector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bd-j%2Fprospector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bd-j%2Fprospector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bd-j%2Fprospector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bd-j","download_url":"https://codeload.github.com/bd-j/prospector/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bd-j%2Fprospector/sbom","scorecard":{"id":228930,"data":{"date":"2025-08-11","repo":{"name":"github.com/bd-j/prospector","commit":"ff8d5e4d5421fec33f19a694365ca5d56c230fdb"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.5,"checks":[{"name":"Maintained","score":2,"reason":"1 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":3,"reason":"Found 5/16 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/release.yml:1","Warn: no topLevel permission defined: .github/workflows/tests.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/bd-j/prospector/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/bd-j/prospector/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/bd-j/prospector/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/bd-j/prospector/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/bd-j/prospector/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/bd-j/prospector/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/bd-j/prospector/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/bd-j/prospector/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/bd-j/prospector/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/bd-j/prospector/tests.yml/main?enable=pin","Warn: pipCommand not pinned by hash: conda_install.sh:16","Warn: pipCommand not pinned by hash: .github/workflows/release.yml:40","Warn: pipCommand not pinned by hash: .github/workflows/release.yml:41","Warn: pipCommand not pinned by hash: .github/workflows/release.yml:44","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:32","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:33","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:34","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:35","Info:   0 out of   8 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   9 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":2,"reason":"8 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-h2x6-5jx5-46hf","Warn: Project is vulnerable to: PYSEC-2021-856 / GHSA-5545-2q6w-2gh6","Warn: Project is vulnerable to: GHSA-6p56-wp2h-9hxr","Warn: Project is vulnerable to: PYSEC-2019-108 / GHSA-9fq2-x9r6-wfmf","Warn: Project is vulnerable to: PYSEC-2021-857 / GHSA-f7c7-j99h-c22f","Warn: Project is vulnerable to: GHSA-fpfv-jqm9-f5jm","Warn: Project is vulnerable to: PYSEC-2023-102","Warn: Project is vulnerable to: PYSEC-2023-114"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 21 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T04:26:52.839Z","repository_id":8797267,"created_at":"2025-08-17T04:26:52.839Z","updated_at":"2025-08-17T04:26:52.839Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31579058,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fitting","stellar-population-properties"],"created_at":"2024-10-15T01:29:09.530Z","updated_at":"2026-04-09T00:02:07.121Z","avatar_url":"https://github.com/bd-j.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"doc/_static/logo_name_kh.png\" height=75/\u003e  \u003c!-- . --\u003e\n==========\n\nVersion 2.0! (in progress)\n--------------------------\n\nThis is a major refactor to allow for multiple datasets (i.e. multiple spectra)\nwith different noise models and instrument parameters to constrain a single\ngalaxy model.  Other updates may include cleaner stored outputs, interfaces with\nadditional nested samplers, and improved tretments of smoothing.\n\nWork to do includes:\n\n- [x] Convert to/from old style observation dictionaries\n- [x] Put responsibility for Noise Models including outlier modeling in individual Observation instances\n- [x] Make predictions even when there is no fittable data (e.g. model spectra when fitting photometry only)\n- [x] Store Observation objects in HDF5, FITS, etc as structured arrays with metadata\n- [x] Catch (and handle) emission line marginalization if spectra overlap.\n- [x] Structured ndarray for output chains and lnlikehoods\n- [x] Update docs\n- [x] Update demo scripts\n- [x] Account for undersampled spectra via explicit rebinning.\n- [ ] Account for undersampled spectra via a square convolution in pixel space.\n- [x] Implement UltraNest and Nautilus backends\n- [x] Test i/o with structured arrays\n- [ ] Structured ndarray for derived parameters\n- [ ] Store samples of spectra, photometry, and mfrac (blobs)\n- [ ] Update notebooks\n- [ ] Update plotting module\n- [ ] Test multi-spectral calibration, smoothing, and noise modeling\n- [ ] Test smoothing accounting for library, instrumental \u0026 physical smoothing\n- [ ] Implement an emulator-based SpecModel class\n\n\n\nMigration from \u003c v2.0\n---------------------\n\nFor many users the primary difference from v1.X will be that the data to predict\nand fit a model to is now specified as a list of\n`prospect.observation.Observation()` instances, instead of a single 'obs'\ndictionary.  There is a new convenience method to convert from the old 'obs'\ndictionary format to the new specification. This can be used with existing\nscripts as follows:\n\n```py\n# old build_obs function giving a dictionary\nobs_dict = build_obs(**run_params)\n# get convenience method\nfrom prospect.observation import from_oldstyle\n# make a new list of Observation instances from the dictionary\nobservations = from_oldstyle(obs_dict)\n# verify and prepare for fitting; similar to 'obsutils.fix_obs()'\n[obs.rectify() for obs in observations]\nprint(observations)\n```\n\nIt is recommended to do the conversion within the `build_obs()` method, if\npossible. This list of observations is then supplied to `fit_model`.  Because\nnoise models are now attached explicitly to each observation, they do not need\nto be generated separately or supplied to `fit_model()`, which no longer accepts\na `noise=` argument.  For outlier models, the the noise model should be\ninstantiated with names for the outlier model that correspond to fixed or free\nparameters of the model.\n\n```py\nfrom prospect.fitting import fit_model\noutput = fit_model(observations, model, sps, **config)\n```\n\nAnother change is that spectral response functions (i.e. calibration vectors)\nare now handled by specialized sub-classes of these `Observation` classes.  See\nthe [spectroscopy docs](doc/spectra.rst) for details.\n\nThe interface to `write_model` has been changed and simplified.  See\n[usage](doc/usage.rst) for details.\n\nFinally, the output chain or samples is now stored as a structured array, where\neach row corresponds to a sample, and each column is a parameter (possibly\nmultidimensional).  Additional information (such as sample weights, likelihoods,\nand poster probabilities) are stored as additional datasets in the output.  The\n`unstructured_chain` dataset of the output contains an old-style simple\n`numpy.ndarray` of shape `(nsample, ndim)`\n\n\nPurpose\n-------\n\n[![Docs](https://readthedocs.org/projects/prospect/badge/?version=latest)](https://readthedocs.org/projects/prospect/badge/?version=latest)\n[![Tests](https://github.com/bd-j/prospector/workflows/Tests/badge.svg)](https://github.com/bd-j/prospector/actions?query=workflow%3ATests)\n[![arXiv](https://img.shields.io/badge/arXiv-2012.01426-b31b1b.svg)](https://arxiv.org/abs/2012.01426)\n[![LICENSE](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](https://github.com/bd-j/prospector/blob/main/LICENSE)\n\n\nConduct principled inference of stellar population properties from photometric\nand/or spectroscopic data.  Prospector allows you to:\n\n* Infer high-dimensional stellar population properties using parametric or\n  highly flexible SFHs (with nested or ensemble Monte Carlo sampling)\n\n* Combine multiple photometric, spectroscopic, and/or line flux datasets from\n  the UV to Far-IR rigorously using a flexible spectroscopic calibration model\n  and forward modeling many aspects of spectroscopic data analysis.\n\nRead the [documentation](http://prospect.readthedocs.io/en/latest/) and the\ncode [paper](https://ui.adsabs.harvard.edu/abs/2021ApJS..254...22J/abstract).\n\nInstallation\n------------\n\nSee [installation](doc/installation.rst) for requirements and dependencies.\nThe [documentation](http://prospect.readthedocs.io/en/latest/) includes a tutorial and demos.\n\nTo install to a conda environment with dependencies, see `conda_install.sh`.\nTo install just Prospector (stable release):\n```\npython -m pip install astro-prospector\n```\n\nTo install the latest development version:\n```\ncd \u003cinstall_dir\u003e\ngit clone https://github.com/bd-j/prospector\ncd prospector\npython -m pip install .\n```\n\nThen, in Python\n```python\nimport prospect\n```\n\n\nCitation\n------\n\nIf you use this code, please reference [this paper](https://ui.adsabs.harvard.edu/abs/2021ApJS..254...22J/abstract):\n```\n@ARTICLE{2021ApJS..254...22J,\n       author = {{Johnson}, Benjamin D. and {Leja}, Joel and {Conroy}, Charlie and {Speagle}, Joshua S.},\n        title = \"{Stellar Population Inference with Prospector}\",\n      journal = {\\apjs},\n     keywords = {Galaxy evolution, Spectral energy distribution, Astronomy data modeling, 594, 2129, 1859, Astrophysics - Astrophysics of Galaxies, Astrophysics - Instrumentation and Methods for Astrophysics},\n         year = 2021,\n        month = jun,\n       volume = {254},\n       number = {2},\n          eid = {22},\n        pages = {22},\n          doi = {10.3847/1538-4365/abef67},\narchivePrefix = {arXiv},\n       eprint = {2012.01426},\n primaryClass = {astro-ph.GA},\n       adsurl = {https://ui.adsabs.harvard.edu/abs/2021ApJS..254...22J},\n      adsnote = {Provided by the SAO/NASA Astrophysics Data System}\n}\n```\n\nand make sure to cite the dependencies as listed in [installation](doc/installation.rst)\n\nExample\n-------\n\nInference with mock broadband data, showing the change in posteriors as the\nnumber of photometric bands is increased.\n![Demonstration of posterior inference with increasing number of photometric bands](doc/images/animation.gif)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbd-j%2Fprospector","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbd-j%2Fprospector","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbd-j%2Fprospector/lists"}