{"id":787,"name":"Climate_Indices","description":"Contains Python implementations of various climate index algorithms which provide a geographical and temporal picture of the severity of precipitation and temperature anomalies useful for climate monitoring and research.","url":"https://github.com/monocongo/climate_indices","last_synced_at":"2026-06-13T08:02:50.632Z","repository":{"id":41355831,"uuid":"94227441","full_name":"monocongo/climate_indices","owner":"monocongo","description":"Climate indices for drought monitoring","archived":false,"fork":false,"pushed_at":"2026-06-04T01:49:07.000Z","size":38689,"stargazers_count":390,"open_issues_count":125,"forks_count":176,"subscribers_count":19,"default_branch":"main","last_synced_at":"2026-06-09T06:05:33.199Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://monocongo.github.io/climate_indices/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/monocongo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"code_of_conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-06-13T15:21:07.000Z","updated_at":"2026-06-02T03:19:10.000Z","dependencies_parsed_at":"2026-04-04T22:01:24.698Z","dependency_job_id":null,"html_url":"https://github.com/monocongo/climate_indices","commit_stats":{"total_commits":978,"total_committers":19,"mean_commits":"51.473684210526315","dds":"0.33537832310838445","last_synced_commit":"3c503463b91f407cab21c4e3876e7e20d8926399"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/monocongo/climate_indices","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/monocongo","download_url":"https://codeload.github.com/monocongo/climate_indices/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/sbom","scorecard":{"id":531225,"data":{"date":"2025-08-11","repo":{"name":"github.com/monocongo/climate_indices","commit":"bd2ddd07711b5494b034fcbe3de0e6b647a9143a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5,"checks":[{"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":"Code-Review","score":0,"reason":"Found 0/6 approved changesets -- score normalized to 0","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":"Maintained","score":10,"reason":"28 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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/unit-tests-workflow.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":"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"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":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/unit-tests-workflow.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/monocongo/climate_indices/unit-tests-workflow.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/unit-tests-workflow.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/monocongo/climate_indices/unit-tests-workflow.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/unit-tests-workflow.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/monocongo/climate_indices/unit-tests-workflow.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:18: pin your Docker image by updating python:3.11-slim to python:3.11-slim@sha256:9e885f8239c31f8429448f933638dd13037c9119e2a362aeebdd37ec3bee7c85","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   2 containerImage 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":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (30) 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-20T05:47:38.845Z","repository_id":41355831,"created_at":"2025-08-20T05:47:38.845Z","updated_at":"2025-08-20T05:47:38.845Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34186385,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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"}},"owner":{"login":"monocongo","name":"James Adams","uuid":"1328158","kind":"user","description":"","email":"","website":"https://www.drought.gov/drought/data-maps-tools/software","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/1328158?u=0ab524c4cf2027dd542cb00e6a3344d97ba30738\u0026v=4","repositories_count":75,"last_synced_at":"2024-06-11T15:57:38.274Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/monocongo","funding_links":[],"total_stars":449,"followers":124,"following":0,"created_at":"2022-11-13T06:53:34.934Z","updated_at":"2024-06-11T15:57:40.951Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/monocongo","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/monocongo/repositories"},"packages":[{"id":11975240,"name":"climate-indices","ecosystem":"pypi","description":"Reference implementations of various climate indices typically used for drought monitoring","homepage":"https://github.com/monocongo/climate_indices","licenses":"BSD License","normalized_licenses":["BSD-3-Clause"],"repository_url":"https://github.com/monocongo/climate_indices","keywords_array":["PET","SPEI","SPI","climate","drought","evapotranspiration","meteorology","precipitation"],"namespace":null,"versions_count":17,"first_release_published_at":"2018-09-09T19:24:14.000Z","latest_release_published_at":"2026-04-06T15:10:06.000Z","latest_release_number":"2.4.0","last_synced_at":"2026-06-09T06:02:01.054Z","created_at":"2025-08-03T22:00:40.972Z","updated_at":"2026-06-09T06:02:01.055Z","registry_url":"https://pypi.org/project/climate-indices/","install_command":"pip install climate-indices --index-url https://pypi.org/simple","documentation_url":"https://climate-indices.readthedocs.io/en/latest/","metadata":{"funding":null,"documentation":"https://climate-indices.readthedocs.io/en/latest/","classifiers":["Development Status :: 5 - Production/Stable","Intended Audience :: Developers","Intended Audience :: Education","Intended Audience :: Science/Research","License :: OSI Approved :: BSD License","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Topic :: Scientific/Engineering :: Atmospheric Science","Topic :: Software Development :: Libraries :: Python Modules"],"normalized_name":"climate-indices","project_status":null},"repo_metadata":{"id":41355831,"uuid":"94227441","full_name":"monocongo/climate_indices","owner":"monocongo","description":"Climate indices for drought monitoring","archived":false,"fork":false,"pushed_at":"2026-05-31T19:20:10.000Z","size":38381,"stargazers_count":389,"open_issues_count":112,"forks_count":176,"subscribers_count":19,"default_branch":"main","last_synced_at":"2026-05-31T19:24:20.959Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://monocongo.github.io/climate_indices/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/monocongo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"code_of_conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-06-13T15:21:07.000Z","updated_at":"2026-05-31T19:20:17.000Z","dependencies_parsed_at":"2026-04-04T22:01:24.698Z","dependency_job_id":null,"html_url":"https://github.com/monocongo/climate_indices","commit_stats":{"total_commits":978,"total_committers":19,"mean_commits":"51.473684210526315","dds":"0.33537832310838445","last_synced_commit":"3c503463b91f407cab21c4e3876e7e20d8926399"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/monocongo/climate_indices","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/monocongo","download_url":"https://codeload.github.com/monocongo/climate_indices/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/sbom","scorecard":{"id":531225,"data":{"date":"2025-08-11","repo":{"name":"github.com/monocongo/climate_indices","commit":"bd2ddd07711b5494b034fcbe3de0e6b647a9143a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5,"checks":[{"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":"Code-Review","score":0,"reason":"Found 0/6 approved changesets -- score normalized to 0","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":"Maintained","score":10,"reason":"28 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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/unit-tests-workflow.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":"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"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":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/unit-tests-workflow.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/monocongo/climate_indices/unit-tests-workflow.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/unit-tests-workflow.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/monocongo/climate_indices/unit-tests-workflow.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/unit-tests-workflow.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/monocongo/climate_indices/unit-tests-workflow.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:18: pin your Docker image by updating python:3.11-slim to python:3.11-slim@sha256:9e885f8239c31f8429448f933638dd13037c9119e2a362aeebdd37ec3bee7c85","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   2 containerImage 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":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (30) 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-20T05:47:38.845Z","repository_id":41355831,"created_at":"2025-08-20T05:47:38.845Z","updated_at":"2025-08-20T05:47:38.845Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33756577,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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"},"owner_record":{"login":"monocongo","name":"James Adams","uuid":"1328158","kind":"user","description":"","email":"","website":"https://www.drought.gov/drought/data-maps-tools/software","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/1328158?u=0ab524c4cf2027dd542cb00e6a3344d97ba30738\u0026v=4","repositories_count":75,"last_synced_at":"2024-06-11T15:57:38.274Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/monocongo","funding_links":[],"total_stars":449,"followers":124,"following":0,"created_at":"2022-11-13T06:53:34.934Z","updated_at":"2024-06-11T15:57:40.951Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/monocongo","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/monocongo/repositories"},"tags":[]},"repo_metadata_updated_at":"2026-06-07T05:04:56.475Z","dependent_packages_count":0,"downloads":1823,"downloads_period":"last-month","dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":49.248760560139836,"dependent_packages_count":8.739629248255525,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":28.99419490419768},"purl":"pkg:pypi/climate-indices","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/climate-indices","docker_dependents_count":1,"docker_downloads_count":100,"usage_url":"https://repos.ecosyste.ms/usage/pypi/climate-indices","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/climate-indices/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2026-06-04T04:00:11.872Z","issues_count":334,"pull_requests_count":293,"avg_time_to_close_issue":6575191.9357798165,"avg_time_to_close_pull_request":1156584.0036231885,"issues_closed_count":218,"pull_requests_closed_count":276,"pull_request_authors_count":17,"issue_authors_count":111,"avg_comments_per_issue":2.523952095808383,"avg_comments_per_pull_request":1.0989761092150172,"merged_pull_requests_count":248,"bot_issues_count":0,"bot_pull_requests_count":32,"past_year_issues_count":17,"past_year_pull_requests_count":44,"past_year_avg_time_to_close_issue":2648724.3333333335,"past_year_avg_time_to_close_pull_request":66797.9375,"past_year_issues_closed_count":3,"past_year_pull_requests_closed_count":32,"past_year_pull_request_authors_count":2,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":0.7058823529411765,"past_year_avg_comments_per_pull_request":2.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":29,"past_year_merged_pull_requests_count":26,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/issues","maintainers":[{"login":"monocongo","count":403,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/monocongo"}],"active_maintainers":[{"login":"monocongo","count":28,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/monocongo"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/climate-indices/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/climate-indices/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/climate-indices/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/climate-indices/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/climate-indices/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/climate-indices/codemeta","maintainers":[{"uuid":"monocongo","login":"monocongo","name":null,"email":null,"url":null,"packages_count":4,"html_url":"https://pypi.org/user/monocongo/","role":"Owner","created_at":"2025-08-03T22:30:40.754Z","updated_at":"2025-08-03T22:30:40.754Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/monocongo/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":883093,"maintainers_count":378072,"namespaces_count":0,"keywords_count":289179,"github":"pypi","metadata":{"funded_packages_count":54301},"icon_url":"https://github.com/pypi.png","created_at":"2022-04-04T15:19:23.364Z","updated_at":"2026-06-10T05:13:28.296Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/namespaces"}},{"id":11733255,"name":"github.com/monocongo/climate_indices","ecosystem":"go","description":null,"homepage":null,"licenses":"other","normalized_licenses":["Other"],"repository_url":"https://github.com/monocongo/climate_indices","keywords_array":[],"namespace":null,"versions_count":4,"first_release_published_at":"2018-01-03T03:00:48.000Z","latest_release_published_at":"2026-04-06T09:57:29.000Z","latest_release_number":"v2.4.0+incompatible","last_synced_at":"2026-06-09T06:02:02.322Z","created_at":"2025-06-05T11:15:01.162Z","updated_at":"2026-06-09T06:02:02.322Z","registry_url":"https://pkg.go.dev/github.com/monocongo/climate_indices","install_command":"go get github.com/monocongo/climate_indices","documentation_url":"https://pkg.go.dev/github.com/monocongo/climate_indices#section-documentation","metadata":{},"repo_metadata":{"id":41355831,"uuid":"94227441","full_name":"monocongo/climate_indices","owner":"monocongo","description":"Climate indices for drought monitoring","archived":false,"fork":false,"pushed_at":"2025-08-03T22:13:38.000Z","size":31001,"stargazers_count":378,"open_issues_count":108,"forks_count":173,"subscribers_count":21,"default_branch":"master","last_synced_at":"2025-10-10T23:18:26.154Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://monocongo.github.io/climate_indices/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/monocongo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"code_of_conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-06-13T15:21:07.000Z","updated_at":"2025-10-07T05:46:38.000Z","dependencies_parsed_at":"2024-11-05T23:38:18.517Z","dependency_job_id":"a10e6313-a48c-46db-8f25-e70875ca5186","html_url":"https://github.com/monocongo/climate_indices","commit_stats":{"total_commits":978,"total_committers":19,"mean_commits":"51.473684210526315","dds":"0.33537832310838445","last_synced_commit":"3c503463b91f407cab21c4e3876e7e20d8926399"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/monocongo/climate_indices","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/monocongo","download_url":"https://codeload.github.com/monocongo/climate_indices/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/sbom","scorecard":{"id":531225,"data":{"date":"2025-08-11","repo":{"name":"github.com/monocongo/climate_indices","commit":"bd2ddd07711b5494b034fcbe3de0e6b647a9143a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5,"checks":[{"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":"Code-Review","score":0,"reason":"Found 0/6 approved changesets -- score normalized to 0","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":"Maintained","score":10,"reason":"28 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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/unit-tests-workflow.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":"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"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":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/unit-tests-workflow.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/monocongo/climate_indices/unit-tests-workflow.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/unit-tests-workflow.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/monocongo/climate_indices/unit-tests-workflow.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/unit-tests-workflow.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/monocongo/climate_indices/unit-tests-workflow.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:18: pin your Docker image by updating python:3.11-slim to python:3.11-slim@sha256:9e885f8239c31f8429448f933638dd13037c9119e2a362aeebdd37ec3bee7c85","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   2 containerImage 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":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (30) 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-20T05:47:38.845Z","repository_id":41355831,"created_at":"2025-08-20T05:47:38.845Z","updated_at":"2025-08-20T05:47:38.845Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279006611,"owners_count":26084148,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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"},"owner_record":{"login":"monocongo","name":"James Adams","uuid":"1328158","kind":"user","description":"","email":"","website":"https://www.drought.gov/drought/data-maps-tools/software","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/1328158?u=0ab524c4cf2027dd542cb00e6a3344d97ba30738\u0026v=4","repositories_count":75,"last_synced_at":"2024-06-11T15:57:38.274Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/monocongo","funding_links":[],"total_stars":449,"followers":124,"following":0,"created_at":"2022-11-13T06:53:34.934Z","updated_at":"2024-06-11T15:57:40.951Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/monocongo","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/monocongo/repositories"},"tags":[{"name":"v0.1.0-beta","sha":"96067fbf076e9be933543ff612b86b6956b5b442","kind":"commit","published_at":"2018-05-15T15:40:25.000Z","download_url":"https://codeload.github.com/monocongo/climate_indices/tar.gz/v0.1.0-beta","html_url":"https://github.com/monocongo/climate_indices/releases/tag/v0.1.0-beta","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/monocongo/climate_indices@v0.1.0-beta","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/tags/v0.1.0-beta","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/tags/v0.1.0-beta/manifests"},{"name":"v0.1.0-alpha","sha":"57a5aadbb7956fad5d4265bff8ca9f5f85082637","kind":"commit","published_at":"2018-01-03T03:00:48.000Z","download_url":"https://codeload.github.com/monocongo/climate_indices/tar.gz/v0.1.0-alpha","html_url":"https://github.com/monocongo/climate_indices/releases/tag/v0.1.0-alpha","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/monocongo/climate_indices@v0.1.0-alpha","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/tags/v0.1.0-alpha","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/tags/v0.1.0-alpha/manifests"}]},"repo_metadata_updated_at":"2025-10-12T13:27:19.698Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":5.757538697138725,"dependent_packages_count":5.395053785167736,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":5.57629624115323},"purl":"pkg:golang/github.com/monocongo/climate_indices","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/go/github.com/monocongo/climate_indices","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/go/github.com/monocongo/climate_indices","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/go/github.com/monocongo/climate_indices/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2025-09-13T00:23:57.817Z","issues_count":322,"pull_requests_count":252,"avg_time_to_close_issue":6629979.855813953,"avg_time_to_close_pull_request":1288954.6341463414,"issues_closed_count":215,"pull_requests_closed_count":246,"pull_request_authors_count":17,"issue_authors_count":110,"avg_comments_per_issue":2.580745341614907,"avg_comments_per_pull_request":0.9404761904761905,"merged_pull_requests_count":224,"bot_issues_count":0,"bot_pull_requests_count":3,"past_year_issues_count":15,"past_year_pull_requests_count":15,"past_year_avg_time_to_close_issue":17643.0,"past_year_avg_time_to_close_pull_request":1420227.1538461538,"past_year_issues_closed_count":2,"past_year_pull_requests_closed_count":13,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":11,"past_year_avg_comments_per_issue":0.3333333333333333,"past_year_avg_comments_per_pull_request":1.5333333333333332,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":13,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/issues","maintainers":[{"login":"monocongo","count":380,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/monocongo"}],"active_maintainers":[{"login":"monocongo","count":8,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/monocongo"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fmonocongo%2Fclimate_indices/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fmonocongo%2Fclimate_indices/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fmonocongo%2Fclimate_indices/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fmonocongo%2Fclimate_indices/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fmonocongo%2Fclimate_indices/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fmonocongo%2Fclimate_indices/codemeta","maintainers":[],"registry":{"name":"proxy.golang.org","url":"https://proxy.golang.org","ecosystem":"go","default":true,"packages_count":2166601,"maintainers_count":0,"namespaces_count":792747,"keywords_count":113213,"github":"golang","metadata":{"funded_packages_count":53976},"icon_url":"https://github.com/golang.png","created_at":"2022-04-04T15:19:22.939Z","updated_at":"2026-06-10T05:03:23.672Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/namespaces"}}],"commits":{"id":549537,"full_name":"monocongo/climate_indices","default_branch":"master","total_commits":1218,"total_committers":21,"total_bot_commits":33,"total_bot_committers":2,"mean_commits":58.0,"dds":0.31444991789819376,"past_year_total_commits":238,"past_year_total_committers":4,"past_year_total_bot_commits":29,"past_year_total_bot_committers":1,"past_year_mean_commits":59.5,"past_year_dds":0.2226890756302521,"last_synced_at":"2026-06-09T06:06:27.286Z","last_synced_commit":"f96895bd37f0e41deab0bcc25fc8021410c207ec","created_at":"2023-03-09T04:35:05.144Z","updated_at":"2026-06-09T06:04:11.309Z","committers":[{"name":"James Adams","email":"monocongo@gmail.com","login":"monocongo","count":835},{"name":"James.Adams","email":"James.Adams@CD0004059809.nesdis.noaa.local","login":null,"count":213},{"name":"james.adams","email":"james.adams@opensignal.com","login":null,"count":60},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":32},{"name":"james.a","email":"james.a@claraanalytics.com","login":null,"count":25},{"name":"James Adams","email":"james.adams@verisk.com","login":null,"count":11},{"name":"Benjamin Root","email":"ben.v.root@gmail.com","login":"WeatherGod","count":10},{"name":"Arnab Paul Choudhury","email":"arnabpc.oshin94@gmail.com","login":"oshin94","count":9},{"name":"Nathan Nayda","email":"ntnayda@secondpillar.com","login":"nnayda","count":6},{"name":"kikocorreoso","email":"kikocorreoso@gmail.com","login":null,"count":4},{"name":"AGericke","email":"gericke@igb-berlin","login":null,"count":3},{"name":"snyk-bot","email":"snyk-bot@snyk.io","login":"snyk-bot","count":1},{"name":"kikocorreoso","email":"you@example.com","login":"invalid-email-address","count":1},{"name":"James Adams","email":"jadams@Jamess-MacBook-Pro.local","login":null,"count":1},{"name":"Scott Wales","email":"scott.wales@unimelb.edu.au","login":null,"count":1},{"name":"haysengithub","email":"dduguye@gmail.com","login":null,"count":1},{"name":"deepsource-autofix[bot]","email":"62050782+deepsource-autofix[bot]","login":"deepsource-autofix[bot]","count":1},{"name":"Laura Guillory","email":"laura.a.guillory@gmail.com","login":"Laura-Guillory","count":1},{"name":"Ben Lewis","email":"benjimin","login":"benjimin","count":1},{"name":"David de Klerk","email":"david.deklerk@ed.ac.uk","login":"dawiedotcom","count":1},{"name":"DeepSource Bot","email":"bot@deepsource.io","login":"deepsourcebot","count":1}],"past_year_committers":[{"name":"James Adams","email":"monocongo@gmail.com","login":"monocongo","count":185},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":29},{"name":"james.a","email":"james.a@claraanalytics.com","login":null,"count":23},{"name":"James Adams","email":"jadams@Jamess-MacBook-Pro.local","login":null,"count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-06-11T00:00:09.886Z","repositories_count":6255683,"commits_count":882960232,"contributors_count":35049696,"owners_count":1164503,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"monocongo/climate_indices","html_url":"https://github.com/monocongo/climate_indices","last_synced_at":"2026-06-04T04:00:11.872Z","status":null,"issues_count":334,"pull_requests_count":293,"avg_time_to_close_issue":6575191.9357798165,"avg_time_to_close_pull_request":1156584.0036231885,"issues_closed_count":218,"pull_requests_closed_count":276,"pull_request_authors_count":17,"issue_authors_count":111,"avg_comments_per_issue":2.523952095808383,"avg_comments_per_pull_request":1.0989761092150172,"merged_pull_requests_count":248,"bot_issues_count":0,"bot_pull_requests_count":32,"past_year_issues_count":17,"past_year_pull_requests_count":44,"past_year_avg_time_to_close_issue":2648724.3333333335,"past_year_avg_time_to_close_pull_request":66797.9375,"past_year_issues_closed_count":3,"past_year_pull_requests_closed_count":32,"past_year_pull_request_authors_count":2,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":0.7058823529411765,"past_year_avg_comments_per_pull_request":2.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":29,"past_year_merged_pull_requests_count":26,"created_at":"2023-05-09T10:36:02.080Z","updated_at":"2026-06-04T04:00:11.912Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/monocongo%2Fclimate_indices/issues","issue_labels_count":{"enhancement":33,"help wanted":19,"bug":12,"type:infrastructure":6,"epic:pipeline":3,"question":3,"type:testing":2,"documentation":2,"epic:validation":1},"pull_request_labels_count":{"dependencies":33,"python:uv":23,"github_actions":6,"enhancement":1},"issue_author_associations_count":{"OWNER":175,"NONE":146,"CONTRIBUTOR":13},"pull_request_author_associations_count":{"OWNER":228,"CONTRIBUTOR":52,"NONE":13},"issue_authors":{"monocongo":175,"crestedcaracaryn":6,"kikocorreoso":5,"bennyistanto":5,"WeatherGod":5,"aleccourt":4,"SouhailAB":4,"s-m-t-c":3,"itati01":3,"wsor330":3,"Lixia0911":3,"tommylees112":3,"helena434":2,"yheng0821":2,"fipoucat":2,"jamaa":2,"Laura-Guillory":2,"cshields143":2,"xeimyname1":2,"Amarounek":2,"lukruh":2,"ValescaFernandes":2,"khider":2,"GiuliaIsNotAvailable":2,"Yunlei-Wu":2,"Aud3":2,"farheen2022":2,"wewe-sst":2,"nurkapan":1,"Queeno11":1,"fmoraess":1,"TreeGuo":1,"sthamanea":1,"greenfrog203":1,"tarmangue":1,"coderkhaleesi":1,"zbc123a":1,"dougrichardson":1,"ritviksahajpal":1,"GvdDool":1,"abhilashsinghimd":1,"aniyou1":1,"andiefajardo":1,"mjh1366":1,"Shehabcad":1,"AnnMt":1,"mvdebolskiy":1,"HEXU-123":1,"kurkutesa":1,"njdepsky":1,"RR-Torres":1,"DamienIrving":1,"oshin94":1,"meerfrau":1,"iajzenszmi":1,"lexming":1,"NickleDave":1,"Yassminaa":1,"gszs06":1,"dgoldwx2112":1,"NILICK":1,"SaumikMallik":1,"ameliafdezrodriguez":1,"david-e-rupp":1,"meklit-y":1,"heroldn":1,"mada0007":1,"Climatezhou":1,"pankajkarman":1,"samburu":1,"aidenrobert":1,"Nazira5":1,"matteodefelice":1,"rabons":1,"mabelcalim":1,"sumi137":1,"Linimie":1,"usmansall":1,"hsjok":1,"mmaoyi":1,"richpsharp":1,"derrickburt":1,"EliT1626":1,"jalder-usgs":1,"levisocool":1,"minxu74":1,"alperdincer":1,"xzhangatnuist":1,"qylxiao":1,"DnyaneshWarade":1,"svish91":1,"Seven-milk":1,"DancingChild":1,"lincystar":1,"JustinTrvz":1,"vuminhtue":1,"ben29med":1,"ghost":1,"Daafip":1,"jeremietellus":1,"pratyushags":1,"Izzylzy":1,"zhaod95":1,"rb4844":1,"Romaysa":1,"chrisbanze":1,"tugce-b":1,"1073766230":1,"PawanIndia87":1,"Okeyode22":1,"JulianGiles":1},"pull_request_authors":{"monocongo":228,"dependabot[bot]":32,"WeatherGod":10,"Seven-milk":7,"kikocorreoso":3,"nnayda":2,"go1me":1,"oshin94":1,"cshields143":1,"dawiedotcom":1,"ScottWales":1,"Emmadd":1,"itati01":1,"Daafip":1,"Laura-Guillory":1,"benjimin":1,"synflyn28":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-06-09T00:00:17.805Z","repositories_count":14786110,"issues_count":33484564,"pull_requests_count":110252178,"authors_count":11296783,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{"type:infrastructure":6,"enhancement":5,"epic:pipeline":3,"type:testing":2,"bug":1,"epic:validation":1},"past_year_pull_request_labels_count":{"dependencies":29,"python:uv":23,"github_actions":6},"past_year_issue_author_associations_count":{"OWNER":13,"NONE":3,"CONTRIBUTOR":1},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":29,"OWNER":15},"past_year_issue_authors":{"monocongo":13,"ameliafdezrodriguez":1,"aniyou1":1,"WeatherGod":1,"xzhangatnuist":1},"past_year_pull_request_authors":{"dependabot[bot]":29,"monocongo":15},"maintainers":[{"login":"monocongo","count":403,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/monocongo"}],"active_maintainers":[{"login":"monocongo","count":28,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/monocongo"}]},"events":{"total":{"DeleteEvent":27,"PullRequestEvent":39,"ForkEvent":11,"IssuesEvent":20,"WatchEvent":36,"IssueCommentEvent":75,"PushEvent":96,"PullRequestReviewCommentEvent":11,"PullRequestReviewEvent":12,"CreateEvent":39},"last_year":{"DeleteEvent":27,"PullRequestEvent":38,"ForkEvent":5,"IssuesEvent":9,"WatchEvent":9,"IssueCommentEvent":56,"PushEvent":95,"PullRequestReviewEvent":11,"PullRequestReviewCommentEvent":11,"CreateEvent":38}},"keywords":[],"dependencies":[{"ecosystem":"pypi","filepath":"uv.lock","sha":null,"kind":"lockfile","created_at":"2026-04-04T22:01:02.362Z","updated_at":"2026-04-04T22:01:02.362Z","repository_link":"https://github.com/monocongo/climate_indices/blob/main/uv.lock","dependencies":[{"id":25853949942,"package_name":"cloudpickle","ecosystem":"pypi","requirements":"3.1.2","direct":false,"kind":"runtime","optional":false},{"id":25853949997,"package_name":"colorama","ecosystem":"pypi","requirements":"0.4.6","direct":false,"kind":"runtime","optional":false},{"id":25853949998,"package_name":"comm","ecosystem":"pypi","requirements":"0.2.3","direct":false,"kind":"runtime","optional":false},{"id":25853949999,"package_name":"contourpy","ecosystem":"pypi","requirements":"1.3.2","direct":false,"kind":"runtime","optional":false},{"id":25853949379,"package_name":"alabaster","ecosystem":"pypi","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":25853949381,"package_name":"anyio","ecosystem":"pypi","requirements":"4.12.1","direct":false,"kind":"runtime","optional":false},{"id":25853949382,"package_name":"appnope","ecosystem":"pypi","requirements":"0.1.4","direct":false,"kind":"runtime","optional":false},{"id":25853949383,"package_name":"argon2-cffi","ecosystem":"pypi","requirements":"25.1.0","direct":false,"kind":"runtime","optional":false},{"id":25853949384,"package_name":"argon2-cffi-bindings","ecosystem":"pypi","requirements":"25.1.0","direct":false,"kind":"runtime","optional":false},{"id":25853949427,"package_name":"arrow","ecosystem":"pypi","requirements":"1.4.0","direct":false,"kind":"runtime","optional":false},{"id":25853949428,"package_name":"asttokens","ecosystem":"pypi","requirements":"3.0.1","direct":false,"kind":"runtime","optional":false},{"id":25853949429,"package_name":"async-lru","ecosystem":"pypi","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":25853949456,"package_name":"attrs","ecosystem":"pypi","requirements":"25.4.0","direct":false,"kind":"runtime","optional":false},{"id":25853949457,"package_name":"babel","ecosystem":"pypi","requirements":"2.18.0","direct":false,"kind":"runtime","optional":false},{"id":25853949458,"package_name":"backports-tarfile","ecosystem":"pypi","requirements":"1.2.0","direct":false,"kind":"runtime","optional":false},{"id":25853949593,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"4.14.3","direct":false,"kind":"runtime","optional":false},{"id":25853949623,"package_name":"bleach","ecosystem":"pypi","requirements":"6.3.0","direct":false,"kind":"runtime","optional":false},{"id":25853949624,"package_name":"boolean-py","ecosystem":"pypi","requirements":"5.0","direct":false,"kind":"runtime","optional":false},{"id":25853949625,"package_name":"build","ecosystem":"pypi","requirements":"1.4.0","direct":false,"kind":"runtime","optional":false},{"id":25853949626,"package_name":"cachecontrol","ecosystem":"pypi","requirements":"0.14.4","direct":false,"kind":"runtime","optional":false},{"id":25853949627,"package_name":"cartopy","ecosystem":"pypi","requirements":"0.25.0","direct":false,"kind":"runtime","optional":false},{"id":25853949862,"package_name":"certifi","ecosystem":"pypi","requirements":"2026.1.4","direct":false,"kind":"runtime","optional":false},{"id":25853949863,"package_name":"cffi","ecosystem":"pypi","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":25853949864,"package_name":"cftime","ecosystem":"pypi","requirements":"1.6.5","direct":false,"kind":"runtime","optional":false},{"id":25853949885,"package_name":"charset-normalizer","ecosystem":"pypi","requirements":"3.4.4","direct":false,"kind":"runtime","optional":false},{"id":25853949886,"package_name":"click","ecosystem":"pypi","requirements":"8.3.1","direct":false,"kind":"runtime","optional":false},{"id":25853949887,"package_name":"climate-indices","ecosystem":"pypi","requirements":"2.2.0","direct":false,"kind":"runtime","optional":false},{"id":25853950032,"package_name":"contourpy","ecosystem":"pypi","requirements":"1.3.3","direct":false,"kind":"runtime","optional":false},{"id":25853950042,"package_name":"coverage","ecosystem":"pypi","requirements":"7.13.4","direct":false,"kind":"runtime","optional":false},{"id":25853950045,"package_name":"cryptography","ecosystem":"pypi","requirements":"46.0.5","direct":false,"kind":"runtime","optional":false},{"id":25853950052,"package_name":"cycler","ecosystem":"pypi","requirements":"0.12.1","direct":false,"kind":"runtime","optional":false},{"id":25853950056,"package_name":"cyclonedx-python-lib","ecosystem":"pypi","requirements":"11.6.0","direct":false,"kind":"runtime","optional":false},{"id":25853950096,"package_name":"dask","ecosystem":"pypi","requirements":"2026.1.2","direct":false,"kind":"runtime","optional":false},{"id":25853950471,"package_name":"defusedxml","ecosystem":"pypi","requirements":"0.7.1","direct":false,"kind":"runtime","optional":false},{"id":25853950472,"package_name":"docutils","ecosystem":"pypi","requirements":"0.21.2","direct":false,"kind":"runtime","optional":false},{"id":25853950473,"package_name":"docutils","ecosystem":"pypi","requirements":"0.22.4","direct":false,"kind":"runtime","optional":false},{"id":25853950474,"package_name":"exceptiongroup","ecosystem":"pypi","requirements":"1.3.1","direct":false,"kind":"runtime","optional":false},{"id":25853950475,"package_name":"executing","ecosystem":"pypi","requirements":"2.2.1","direct":false,"kind":"runtime","optional":false},{"id":25853950476,"package_name":"fastjsonschema","ecosystem":"pypi","requirements":"2.21.2","direct":false,"kind":"runtime","optional":false},{"id":25853950477,"package_name":"filelock","ecosystem":"pypi","requirements":"3.20.3","direct":false,"kind":"runtime","optional":false},{"id":25853950478,"package_name":"fonttools","ecosystem":"pypi","requirements":"4.61.1","direct":false,"kind":"runtime","optional":false},{"id":25853950483,"package_name":"fqdn","ecosystem":"pypi","requirements":"1.5.1","direct":false,"kind":"runtime","optional":false},{"id":25853950484,"package_name":"fsspec","ecosystem":"pypi","requirements":"2026.2.0","direct":false,"kind":"runtime","optional":false},{"id":25853950485,"package_name":"h11","ecosystem":"pypi","requirements":"0.16.0","direct":false,"kind":"runtime","optional":false},{"id":25853950486,"package_name":"h5netcdf","ecosystem":"pypi","requirements":"1.8.1","direct":false,"kind":"runtime","optional":false},{"id":25853950530,"package_name":"httpcore","ecosystem":"pypi","requirements":"1.0.9","direct":false,"kind":"runtime","optional":false},{"id":25853950531,"package_name":"httpx","ecosystem":"pypi","requirements":"0.28.1","direct":false,"kind":"runtime","optional":false},{"id":25853950532,"package_name":"hypothesis","ecosystem":"pypi","requirements":"6.151.6","direct":false,"kind":"runtime","optional":false},{"id":25853950547,"package_name":"id","ecosystem":"pypi","requirements":"1.6.1","direct":false,"kind":"runtime","optional":false},{"id":25853950604,"package_name":"idna","ecosystem":"pypi","requirements":"3.11","direct":false,"kind":"runtime","optional":false},{"id":25853950605,"package_name":"imagesize","ecosystem":"pypi","requirements":"1.4.1","direct":false,"kind":"runtime","optional":false},{"id":25853950612,"package_name":"importlib-metadata","ecosystem":"pypi","requirements":"8.7.1","direct":false,"kind":"runtime","optional":false},{"id":25853950645,"package_name":"iniconfig","ecosystem":"pypi","requirements":"2.3.0","direct":false,"kind":"runtime","optional":false},{"id":25853950646,"package_name":"ipykernel","ecosystem":"pypi","requirements":"7.2.0","direct":false,"kind":"runtime","optional":false},{"id":25853950647,"package_name":"ipython","ecosystem":"pypi","requirements":"8.38.0","direct":false,"kind":"runtime","optional":false},{"id":25853950652,"package_name":"ipython","ecosystem":"pypi","requirements":"9.10.0","direct":false,"kind":"runtime","optional":false},{"id":25853950653,"package_name":"ipython-pygments-lexers","ecosystem":"pypi","requirements":"1.1.1","direct":false,"kind":"runtime","optional":false},{"id":25853950654,"package_name":"ipywidgets","ecosystem":"pypi","requirements":"8.1.8","direct":false,"kind":"runtime","optional":false},{"id":25853950685,"package_name":"isoduration","ecosystem":"pypi","requirements":"20.11.0","direct":false,"kind":"runtime","optional":false},{"id":25853950686,"package_name":"jaraco-classes","ecosystem":"pypi","requirements":"3.4.0","direct":false,"kind":"runtime","optional":false},{"id":25853950694,"package_name":"jaraco-context","ecosystem":"pypi","requirements":"6.1.0","direct":false,"kind":"runtime","optional":false},{"id":25853950700,"package_name":"jaraco-functools","ecosystem":"pypi","requirements":"4.4.0","direct":false,"kind":"runtime","optional":false},{"id":25853950725,"package_name":"jedi","ecosystem":"pypi","requirements":"0.19.2","direct":false,"kind":"runtime","optional":false},{"id":25853950764,"package_name":"jeepney","ecosystem":"pypi","requirements":"0.9.0","direct":false,"kind":"runtime","optional":false},{"id":25853950807,"package_name":"jinja2","ecosystem":"pypi","requirements":"3.1.6","direct":false,"kind":"runtime","optional":false},{"id":25853950808,"package_name":"json5","ecosystem":"pypi","requirements":"0.13.0","direct":false,"kind":"runtime","optional":false},{"id":25853950809,"package_name":"jsonpointer","ecosystem":"pypi","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":25853950810,"package_name":"jsonschema","ecosystem":"pypi","requirements":"4.26.0","direct":false,"kind":"runtime","optional":false},{"id":25853950811,"package_name":"jsonschema-specifications","ecosystem":"pypi","requirements":"2025.9.1","direct":false,"kind":"runtime","optional":false},{"id":25853950812,"package_name":"jupyter","ecosystem":"pypi","requirements":"1.1.1","direct":false,"kind":"runtime","optional":false},{"id":25853950855,"package_name":"jupyter-client","ecosystem":"pypi","requirements":"8.8.0","direct":false,"kind":"runtime","optional":false},{"id":25853950944,"package_name":"jupyter-console","ecosystem":"pypi","requirements":"6.6.3","direct":false,"kind":"runtime","optional":false},{"id":25853950984,"package_name":"jupyter-core","ecosystem":"pypi","requirements":"5.9.1","direct":false,"kind":"runtime","optional":false},{"id":25853951007,"package_name":"jupyter-events","ecosystem":"pypi","requirements":"0.12.0","direct":false,"kind":"runtime","optional":false},{"id":25853951008,"package_name":"jupyter-lsp","ecosystem":"pypi","requirements":"2.3.0","direct":false,"kind":"runtime","optional":false},{"id":25853951009,"package_name":"jupyter-server","ecosystem":"pypi","requirements":"2.17.0","direct":false,"kind":"runtime","optional":false},{"id":25853951010,"package_name":"jupyter-server-terminals","ecosystem":"pypi","requirements":"0.5.4","direct":false,"kind":"runtime","optional":false},{"id":25853951011,"package_name":"jupyterlab","ecosystem":"pypi","requirements":"4.5.4","direct":false,"kind":"runtime","optional":false},{"id":25853951012,"package_name":"jupyterlab-pygments","ecosystem":"pypi","requirements":"0.3.0","direct":false,"kind":"runtime","optional":false},{"id":25853951013,"package_name":"jupyterlab-server","ecosystem":"pypi","requirements":"2.28.0","direct":false,"kind":"runtime","optional":false},{"id":25853951014,"package_name":"jupyterlab-widgets","ecosystem":"pypi","requirements":"3.0.16","direct":false,"kind":"runtime","optional":false},{"id":25853951039,"package_name":"keyring","ecosystem":"pypi","requirements":"25.7.0","direct":false,"kind":"runtime","optional":false},{"id":25853951044,"package_name":"kiwisolver","ecosystem":"pypi","requirements":"1.4.9","direct":false,"kind":"runtime","optional":false},{"id":25853951048,"package_name":"lark","ecosystem":"pypi","requirements":"1.3.1","direct":false,"kind":"runtime","optional":false},{"id":25853951049,"package_name":"librt","ecosystem":"pypi","requirements":"0.7.8","direct":false,"kind":"runtime","optional":false},{"id":25853951050,"package_name":"license-expression","ecosystem":"pypi","requirements":"30.4.4","direct":false,"kind":"runtime","optional":false},{"id":25853951051,"package_name":"locket","ecosystem":"pypi","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":25853950266,"package_name":"debugpy","ecosystem":"pypi","requirements":"1.8.20","direct":false,"kind":"runtime","optional":false},{"id":25853950421,"package_name":"decorator","ecosystem":"pypi","requirements":"5.2.1","direct":false,"kind":"runtime","optional":false},{"id":25853951205,"package_name":"markdown-it-py","ecosystem":"pypi","requirements":"4.0.0","direct":false,"kind":"runtime","optional":false},{"id":25853951206,"package_name":"markupsafe","ecosystem":"pypi","requirements":"3.0.3","direct":false,"kind":"runtime","optional":false},{"id":25853951207,"package_name":"matplotlib","ecosystem":"pypi","requirements":"3.10.8","direct":false,"kind":"runtime","optional":false},{"id":25853951220,"package_name":"matplotlib-inline","ecosystem":"pypi","requirements":"0.2.1","direct":false,"kind":"runtime","optional":false},{"id":25853951223,"package_name":"mdurl","ecosystem":"pypi","requirements":"0.1.2","direct":false,"kind":"runtime","optional":false},{"id":25853951224,"package_name":"mistune","ecosystem":"pypi","requirements":"3.2.0","direct":false,"kind":"runtime","optional":false},{"id":25853951247,"package_name":"more-itertools","ecosystem":"pypi","requirements":"10.8.0","direct":false,"kind":"runtime","optional":false},{"id":25853951269,"package_name":"msgpack","ecosystem":"pypi","requirements":"1.1.2","direct":false,"kind":"runtime","optional":false},{"id":25853951520,"package_name":"pure-eval","ecosystem":"pypi","requirements":"0.2.3","direct":false,"kind":"runtime","optional":false},{"id":25853951521,"package_name":"py-cpuinfo","ecosystem":"pypi","requirements":"9.0.0","direct":false,"kind":"runtime","optional":false},{"id":25853951277,"package_name":"mypy","ecosystem":"pypi","requirements":"1.19.1","direct":false,"kind":"runtime","optional":false},{"id":25853951291,"package_name":"mypy-extensions","ecosystem":"pypi","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":25853951310,"package_name":"nbclient","ecosystem":"pypi","requirements":"0.10.4","direct":false,"kind":"runtime","optional":false},{"id":25853951311,"package_name":"nbconvert","ecosystem":"pypi","requirements":"7.17.0","direct":false,"kind":"runtime","optional":false},{"id":25853951325,"package_name":"nbformat","ecosystem":"pypi","requirements":"5.10.4","direct":false,"kind":"runtime","optional":false},{"id":25853951326,"package_name":"nest-asyncio","ecosystem":"pypi","requirements":"1.6.0","direct":false,"kind":"runtime","optional":false},{"id":25853951327,"package_name":"nh3","ecosystem":"pypi","requirements":"0.3.2","direct":false,"kind":"runtime","optional":false},{"id":25853951338,"package_name":"notebook","ecosystem":"pypi","requirements":"7.5.3","direct":false,"kind":"runtime","optional":false},{"id":25853951354,"package_name":"notebook-shim","ecosystem":"pypi","requirements":"0.2.4","direct":false,"kind":"runtime","optional":false},{"id":25853951355,"package_name":"numpy","ecosystem":"pypi","requirements":"2.2.6","direct":false,"kind":"runtime","optional":false},{"id":25853951356,"package_name":"numpy","ecosystem":"pypi","requirements":"2.4.2","direct":false,"kind":"runtime","optional":false},{"id":25853951357,"package_name":"overrides","ecosystem":"pypi","requirements":"7.7.0","direct":false,"kind":"runtime","optional":false},{"id":25853951403,"package_name":"packageurl-python","ecosystem":"pypi","requirements":"0.17.6","direct":false,"kind":"runtime","optional":false},{"id":25853951404,"package_name":"packaging","ecosystem":"pypi","requirements":"26.0","direct":false,"kind":"runtime","optional":false},{"id":25853951405,"package_name":"pandas","ecosystem":"pypi","requirements":"2.3.3","direct":false,"kind":"runtime","optional":false},{"id":25853951406,"package_name":"pandas","ecosystem":"pypi","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":25853951407,"package_name":"pandocfilters","ecosystem":"pypi","requirements":"1.5.1","direct":false,"kind":"runtime","optional":false},{"id":25853951429,"package_name":"parso","ecosystem":"pypi","requirements":"0.8.6","direct":false,"kind":"runtime","optional":false},{"id":25853951430,"package_name":"partd","ecosystem":"pypi","requirements":"1.4.2","direct":false,"kind":"runtime","optional":false},{"id":25853951481,"package_name":"pathspec","ecosystem":"pypi","requirements":"1.0.4","direct":false,"kind":"runtime","optional":false},{"id":25853951482,"package_name":"pexpect","ecosystem":"pypi","requirements":"4.9.0","direct":false,"kind":"runtime","optional":false},{"id":25853951483,"package_name":"pillow","ecosystem":"pypi","requirements":"12.1.1","direct":false,"kind":"runtime","optional":false},{"id":25853951484,"package_name":"pip","ecosystem":"pypi","requirements":"26.0.1","direct":false,"kind":"runtime","optional":false},{"id":25853951485,"package_name":"pip-api","ecosystem":"pypi","requirements":"0.0.34","direct":false,"kind":"runtime","optional":false},{"id":25853951486,"package_name":"pip-audit","ecosystem":"pypi","requirements":"2.10.0","direct":false,"kind":"runtime","optional":false},{"id":25853951487,"package_name":"pip-requirements-parser","ecosystem":"pypi","requirements":"32.0.1","direct":false,"kind":"runtime","optional":false},{"id":25853951488,"package_name":"platformdirs","ecosystem":"pypi","requirements":"4.5.1","direct":false,"kind":"runtime","optional":false},{"id":25853951489,"package_name":"pluggy","ecosystem":"pypi","requirements":"1.6.0","direct":false,"kind":"runtime","optional":false},{"id":25853951490,"package_name":"prometheus-client","ecosystem":"pypi","requirements":"0.24.1","direct":false,"kind":"runtime","optional":false},{"id":25853951491,"package_name":"prompt-toolkit","ecosystem":"pypi","requirements":"3.0.52","direct":false,"kind":"runtime","optional":false},{"id":25853951492,"package_name":"psutil","ecosystem":"pypi","requirements":"7.2.2","direct":false,"kind":"runtime","optional":false},{"id":25853951493,"package_name":"ptyprocess","ecosystem":"pypi","requirements":"0.7.0","direct":false,"kind":"runtime","optional":false},{"id":25853951537,"package_name":"py-serializable","ecosystem":"pypi","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":25853951538,"package_name":"pycparser","ecosystem":"pypi","requirements":"3.0","direct":false,"kind":"runtime","optional":false},{"id":25853951543,"package_name":"pygments","ecosystem":"pypi","requirements":"2.19.2","direct":false,"kind":"runtime","optional":false},{"id":25853951550,"package_name":"pyparsing","ecosystem":"pypi","requirements":"3.3.2","direct":false,"kind":"runtime","optional":false},{"id":25853951554,"package_name":"pyproj","ecosystem":"pypi","requirements":"3.7.1","direct":false,"kind":"runtime","optional":false},{"id":25853951563,"package_name":"pyproj","ecosystem":"pypi","requirements":"3.7.2","direct":false,"kind":"runtime","optional":false},{"id":25853951564,"package_name":"pyproject-hooks","ecosystem":"pypi","requirements":"1.2.0","direct":false,"kind":"runtime","optional":false},{"id":25853951565,"package_name":"pyshp","ecosystem":"pypi","requirements":"3.0.3","direct":false,"kind":"runtime","optional":false},{"id":25853951567,"package_name":"pytest","ecosystem":"pypi","requirements":"9.0.2","direct":false,"kind":"runtime","optional":false},{"id":25853951568,"package_name":"pytest-benchmark","ecosystem":"pypi","requirements":"5.2.3","direct":false,"kind":"runtime","optional":false},{"id":25853951569,"package_name":"pytest-cov","ecosystem":"pypi","requirements":"7.0.0","direct":false,"kind":"runtime","optional":false},{"id":25853951570,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"2.9.0.post0","direct":false,"kind":"runtime","optional":false},{"id":25853951571,"package_name":"python-json-logger","ecosystem":"pypi","requirements":"4.0.0","direct":false,"kind":"runtime","optional":false},{"id":25853951588,"package_name":"pytz","ecosystem":"pypi","requirements":"2025.2","direct":false,"kind":"runtime","optional":false},{"id":25853951606,"package_name":"pywin32-ctypes","ecosystem":"pypi","requirements":"0.2.3","direct":false,"kind":"runtime","optional":false},{"id":25853951607,"package_name":"pywinpty","ecosystem":"pypi","requirements":"3.0.3","direct":false,"kind":"runtime","optional":false},{"id":25853951608,"package_name":"pyyaml","ecosystem":"pypi","requirements":"6.0.3","direct":false,"kind":"runtime","optional":false},{"id":25853951609,"package_name":"pyzmq","ecosystem":"pypi","requirements":"27.1.0","direct":false,"kind":"runtime","optional":false},{"id":25853951612,"package_name":"readme-renderer","ecosystem":"pypi","requirements":"44.0","direct":false,"kind":"runtime","optional":false},{"id":25853951655,"package_name":"referencing","ecosystem":"pypi","requirements":"0.37.0","direct":false,"kind":"runtime","optional":false},{"id":25853951656,"package_name":"requests","ecosystem":"pypi","requirements":"2.32.5","direct":false,"kind":"runtime","optional":false},{"id":25853951657,"package_name":"requests-toolbelt","ecosystem":"pypi","requirements":"1.0.0","direct":false,"kind":"runtime","optional":false},{"id":25853951658,"package_name":"rfc3339-validator","ecosystem":"pypi","requirements":"0.1.4","direct":false,"kind":"runtime","optional":false},{"id":25853951659,"package_name":"rfc3986","ecosystem":"pypi","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":25853951679,"package_name":"rfc3986-validator","ecosystem":"pypi","requirements":"0.1.1","direct":false,"kind":"runtime","optional":false},{"id":25853951680,"package_name":"rfc3987-syntax","ecosystem":"pypi","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":25853951681,"package_name":"rich","ecosystem":"pypi","requirements":"14.3.2","direct":false,"kind":"runtime","optional":false},{"id":25853951682,"package_name":"roman-numerals","ecosystem":"pypi","requirements":"4.1.0","direct":false,"kind":"runtime","optional":false},{"id":25853951745,"package_name":"rpds-py","ecosystem":"pypi","requirements":"0.30.0","direct":false,"kind":"runtime","optional":false},{"id":25853951746,"package_name":"ruff","ecosystem":"pypi","requirements":"0.15.0","direct":false,"kind":"runtime","optional":false},{"id":25853951747,"package_name":"scipy","ecosystem":"pypi","requirements":"1.15.3","direct":false,"kind":"runtime","optional":false},{"id":25853951756,"package_name":"scipy","ecosystem":"pypi","requirements":"1.17.0","direct":false,"kind":"runtime","optional":false},{"id":25853951757,"package_name":"secretstorage","ecosystem":"pypi","requirements":"3.5.0","direct":false,"kind":"runtime","optional":false},{"id":25853952016,"package_name":"send2trash","ecosystem":"pypi","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":25853952018,"package_name":"setuptools","ecosystem":"pypi","requirements":"82.0.0","direct":false,"kind":"runtime","optional":false},{"id":25853952019,"package_name":"shapely","ecosystem":"pypi","requirements":"2.1.2","direct":false,"kind":"runtime","optional":false},{"id":25853952057,"package_name":"snowballstemmer","ecosystem":"pypi","requirements":"3.0.1","direct":false,"kind":"runtime","optional":false},{"id":25853952037,"package_name":"six","ecosystem":"pypi","requirements":"1.17.0","direct":false,"kind":"runtime","optional":false},{"id":25853952070,"package_name":"sortedcontainers","ecosystem":"pypi","requirements":"2.4.0","direct":false,"kind":"runtime","optional":false},{"id":25853952071,"package_name":"soupsieve","ecosystem":"pypi","requirements":"2.8.3","direct":false,"kind":"runtime","optional":false},{"id":25853952076,"package_name":"sphinx","ecosystem":"pypi","requirements":"8.1.3","direct":false,"kind":"runtime","optional":false},{"id":25853952077,"package_name":"sphinx","ecosystem":"pypi","requirements":"9.0.4","direct":false,"kind":"runtime","optional":false},{"id":25853952078,"package_name":"sphinx","ecosystem":"pypi","requirements":"9.1.0","direct":false,"kind":"runtime","optional":false},{"id":25853952079,"package_name":"sphinx-autodoc-typehints","ecosystem":"pypi","requirements":"3.0.1","direct":false,"kind":"runtime","optional":false},{"id":25853952097,"package_name":"sphinx-autodoc-typehints","ecosystem":"pypi","requirements":"3.6.1","direct":false,"kind":"runtime","optional":false},{"id":25853952130,"package_name":"sphinx-autodoc-typehints","ecosystem":"pypi","requirements":"3.6.2","direct":false,"kind":"runtime","optional":false},{"id":25853952131,"package_name":"sphinx-rtd-theme","ecosystem":"pypi","requirements":"3.1.0","direct":false,"kind":"runtime","optional":false},{"id":25853952180,"package_name":"sphinxcontrib-applehelp","ecosystem":"pypi","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":25853952297,"package_name":"sphinxcontrib-devhelp","ecosystem":"pypi","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":25853952502,"package_name":"sphinxcontrib-htmlhelp","ecosystem":"pypi","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":25853952512,"package_name":"sphinxcontrib-jquery","ecosystem":"pypi","requirements":"4.1","direct":false,"kind":"runtime","optional":false},{"id":25853952527,"package_name":"sphinxcontrib-jsmath","ecosystem":"pypi","requirements":"1.0.1","direct":false,"kind":"runtime","optional":false},{"id":25853952590,"package_name":"sphinxcontrib-qthelp","ecosystem":"pypi","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":25853952592,"package_name":"sphinxcontrib-serializinghtml","ecosystem":"pypi","requirements":"2.0.0","direct":false,"kind":"runtime","optional":false},{"id":25853952663,"package_name":"stack-data","ecosystem":"pypi","requirements":"0.6.3","direct":false,"kind":"runtime","optional":false},{"id":25853952664,"package_name":"structlog","ecosystem":"pypi","requirements":"25.5.0","direct":false,"kind":"runtime","optional":false},{"id":25853952665,"package_name":"terminado","ecosystem":"pypi","requirements":"0.18.1","direct":false,"kind":"runtime","optional":false},{"id":25853952666,"package_name":"tinycss2","ecosystem":"pypi","requirements":"1.4.0","direct":false,"kind":"runtime","optional":false},{"id":25853952667,"package_name":"tomli","ecosystem":"pypi","requirements":"2.4.0","direct":false,"kind":"runtime","optional":false},{"id":25853952668,"package_name":"tomli-w","ecosystem":"pypi","requirements":"1.2.0","direct":false,"kind":"runtime","optional":false},{"id":25853952669,"package_name":"toolz","ecosystem":"pypi","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":25853952729,"package_name":"tornado","ecosystem":"pypi","requirements":"6.5.5","direct":false,"kind":"runtime","optional":false},{"id":25853952738,"package_name":"traitlets","ecosystem":"pypi","requirements":"5.14.3","direct":false,"kind":"runtime","optional":false},{"id":25853952739,"package_name":"twine","ecosystem":"pypi","requirements":"6.2.0","direct":false,"kind":"runtime","optional":false},{"id":25853952749,"package_name":"types-psutil","ecosystem":"pypi","requirements":"7.2.2.20260130","direct":false,"kind":"runtime","optional":false},{"id":25853952788,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"4.15.0","direct":false,"kind":"runtime","optional":false},{"id":25853952789,"package_name":"tzdata","ecosystem":"pypi","requirements":"2025.3","direct":false,"kind":"runtime","optional":false},{"id":25853952790,"package_name":"uri-template","ecosystem":"pypi","requirements":"1.3.0","direct":false,"kind":"runtime","optional":false},{"id":25853952791,"package_name":"urllib3","ecosystem":"pypi","requirements":"2.6.3","direct":false,"kind":"runtime","optional":false},{"id":25853952792,"package_name":"wcwidth","ecosystem":"pypi","requirements":"0.6.0","direct":false,"kind":"runtime","optional":false},{"id":25853952917,"package_name":"webcolors","ecosystem":"pypi","requirements":"25.10.0","direct":false,"kind":"runtime","optional":false},{"id":25853952918,"package_name":"webencodings","ecosystem":"pypi","requirements":"0.5.1","direct":false,"kind":"runtime","optional":false},{"id":25853952937,"package_name":"websocket-client","ecosystem":"pypi","requirements":"1.9.0","direct":false,"kind":"runtime","optional":false},{"id":25853952938,"package_name":"widgetsnbextension","ecosystem":"pypi","requirements":"4.0.15","direct":false,"kind":"runtime","optional":false},{"id":25853952957,"package_name":"xarray","ecosystem":"pypi","requirements":"2025.6.1","direct":false,"kind":"runtime","optional":false},{"id":25853953210,"package_name":"xarray","ecosystem":"pypi","requirements":"2026.1.0","direct":false,"kind":"runtime","optional":false},{"id":25853953211,"package_name":"zipp","ecosystem":"pypi","requirements":"3.23.0","direct":false,"kind":"runtime","optional":false}]},{"ecosystem":"docker","filepath":"Dockerfile","sha":null,"kind":"manifest","created_at":"2026-04-04T22:01:02.255Z","updated_at":"2026-04-04T22:01:02.255Z","repository_link":"https://github.com/monocongo/climate_indices/blob/main/Dockerfile","dependencies":[{"id":25853949345,"package_name":"python","ecosystem":"docker","requirements":"3.11-slim","direct":true,"kind":"build","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/benchmarks.yml","sha":null,"kind":"manifest","created_at":"2026-04-04T22:01:01.730Z","updated_at":"2026-04-04T22:01:01.730Z","repository_link":"https://github.com/monocongo/climate_indices/blob/main/.github/workflows/benchmarks.yml","dependencies":[{"id":25853949199,"package_name":"actions/checkout","ecosystem":"actions","requirements":"34e114876b0b11c390a56381ad16ebd13914f8d5","direct":true,"kind":"composite","optional":false},{"id":25853949200,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"a26af69be951a213d495a4c3e4e4022e16d87065","direct":true,"kind":"composite","optional":false},{"id":25853949201,"package_name":"astral-sh/setup-uv","ecosystem":"actions","requirements":"e58605a9b6da7c637471fab8847a5e5a6b8df081","direct":true,"kind":"composite","optional":false},{"id":25853949202,"package_name":"actions/upload-artifact","ecosystem":"actions","requirements":"ea165f8d65b6e75b540449e92b4886f43607fa02","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/release.yml","sha":null,"kind":"manifest","created_at":"2026-04-04T22:01:01.955Z","updated_at":"2026-04-04T22:01:01.955Z","repository_link":"https://github.com/monocongo/climate_indices/blob/main/.github/workflows/release.yml","dependencies":[{"id":25853949289,"package_name":"actions/checkout","ecosystem":"actions","requirements":"34e114876b0b11c390a56381ad16ebd13914f8d5","direct":true,"kind":"composite","optional":false},{"id":25853949290,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"a26af69be951a213d495a4c3e4e4022e16d87065","direct":true,"kind":"composite","optional":false},{"id":25853949291,"package_name":"astral-sh/setup-uv","ecosystem":"actions","requirements":"e58605a9b6da7c637471fab8847a5e5a6b8df081","direct":true,"kind":"composite","optional":false},{"id":25853949292,"package_name":"actions/upload-artifact","ecosystem":"actions","requirements":"ea165f8d65b6e75b540449e92b4886f43607fa02","direct":true,"kind":"composite","optional":false},{"id":25853949293,"package_name":"pypa/gh-action-pypi-publish","ecosystem":"actions","requirements":"ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/unit-tests-workflow.yml","sha":null,"kind":"manifest","created_at":"2023-09-21T19:45:19.707Z","updated_at":"2023-09-21T19:45:19.707Z","repository_link":"https://github.com/monocongo/climate_indices/blob/main/.github/workflows/unit-tests-workflow.yml","dependencies":[{"id":13856857991,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":13856857992,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2023-09-21T19:45:19.977Z","updated_at":"2023-09-21T19:45:19.977Z","repository_link":"https://github.com/monocongo/climate_indices/blob/main/pyproject.toml","dependencies":[{"id":13856858737,"package_name":"cftime","ecosystem":"pypi","requirements":"1.6.2","direct":true,"kind":"runtime","optional":false},{"id":13856858738,"package_name":"dask","ecosystem":"pypi","requirements":"2022.2.0","direct":true,"kind":"runtime","optional":false},{"id":13856858739,"package_name":"h5netcdf","ecosystem":"pypi","requirements":"1.1.0","direct":true,"kind":"runtime","optional":false},{"id":13856858740,"package_name":"python","ecosystem":"pypi","requirements":"\u003e=3.8,\u003c3.12","direct":true,"kind":"runtime","optional":false},{"id":13856858741,"package_name":"scipy","ecosystem":"pypi","requirements":"1.9.3","direct":true,"kind":"runtime","optional":false},{"id":13856858742,"package_name":"xarray","ecosystem":"pypi","requirements":"2023.1.0","direct":true,"kind":"runtime","optional":false},{"id":13856858743,"package_name":"pytest","ecosystem":"pypi","requirements":"*","direct":true,"kind":"develop","optional":false},{"id":13856858744,"package_name":"toml","ecosystem":"pypi","requirements":"0.10.2","direct":true,"kind":"develop","optional":false}]},{"ecosystem":"pypi","filepath":"docs/requirements.txt","sha":null,"kind":"manifest","created_at":"2024-11-05T23:38:18.132Z","updated_at":"2024-11-05T23:38:18.132Z","repository_link":"https://github.com/monocongo/climate_indices/blob/main/docs/requirements.txt","dependencies":[{"id":20582029579,"package_name":"toml","ecosystem":"pypi","requirements":"\u003e=0.10.2","direct":true,"kind":"runtime","optional":false}]}],"score":16.851370585109045,"created_at":"2023-09-11T11:54:35.942Z","updated_at":"2026-06-13T08:02:50.641Z","avatar_url":"https://github.com/monocongo.png","language":"Python","category":"Climate Change","sub_category":"Climate Data Processing and Analysis","monthly_downloads":1823,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"![Banner Image](https://raw.githubusercontent.com/monocongo/climate_indices/main/assets/Global_Monthly_SPI.jpg)\n\n# climate_indices\n\n[//]: # ([![Coverage Status]\u0026#40;https://coveralls.io/repos/github/monocongo/climate_indices/badge.svg?branch=main\u0026#41;]\u0026#40;https://coveralls.io/github/monocongo/climate_indices?branch=main\u0026#41;)\n[//]: # ([![Codacy Status]\u0026#40;https://api.codacy.com/project/badge/Grade/48563cbc37504fc6aa72100370e71f58\u0026#41;]\u0026#40;https://www.codacy.com/app/monocongo/climate_indices?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=monocongo/climate_indices\u0026amp;utm_campaign=Badge_Grade\u0026#41;)\n[![Actions Status](https://github.com/monocongo/climate_indices/workflows/tests/badge.svg)](https://github.com/monocongo/climate_indices/actions)\n[![License](https://img.shields.io/badge/License-BSD%203--Clause-green.svg)](https://opensource.org/licenses/BSD-3-Clause)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/climate-indices)\n\n#### Python library of indices useful for climate monitoring\n\nThis project contains Python implementations of various climate index algorithms which provide\na geographical and temporal picture of the severity and duration of precipitation and temperature\nanomalies useful for climate monitoring and research.\n\nThe following indices are provided:\n\n- [SPI](https://climatedataguide.ucar.edu/climate-data/standardized-precipitation-index-spi),\n  Standardized Precipitation Index, utilizing both gamma and Pearson Type III distributions\n- [SPEI](https://www.researchgate.net/publication/252361460_The_Standardized_Precipitation-Evapotranspiration_Index_SPEI_a_multiscalar_drought_index),\n  Standardized Precipitation Evapotranspiration Index, utilizing both gamma and Pearson Type III distributions\n- [PET](https://www.ncdc.noaa.gov/monitoring-references/dyk/potential-evapotranspiration), Potential Evapotranspiration, utilizing either [Thornthwaite](http://dx.doi.org/10.2307/21073)\n  or [Hargreaves](http://dx.doi.org/10.13031/2013.26773) equations\n- [PNP](http://www.droughtmanagement.info/percent-of-normal-precipitation/),\n  Percentage of Normal Precipitation\n- [PCI](https://www.tandfonline.com/doi/abs/10.1111/J.0033-0124.1980.00300.X), Precipitation Concentration Index\n- [EDDI](https://psl.noaa.gov/eddi/), Evaporative Demand Drought Index\n- [Palmer indices](https://www.droughtmanagement.info/literature/USWB_Meteorological_Drought_1965.pdf),\n  including PDSI, PHDI, PMDI, and Z-Index\n\nThis Python implementation of the above climate index algorithms is being developed\nwith the following goals in mind:\n\n- to provide an open source software package to compute a suite of\n  climate indices commonly used for climate monitoring, with well\n  documented code that is faithful to the relevant literature and\n  which produces scientifically verifiable results\n- to provide a central, open location for participation and collaboration\n  for researchers, developers, and users of climate indices\n- to facilitate standardization and consensus on best-of-breed\n  climate index algorithms and corresponding compliant implementations in Python\n- to provide transparency into the operational code used for climate\n  monitoring activities at NCEI/NOAA, and consequent reproducibility\n  of published datasets computed from this package\n- to incorporate modern software engineering principles and scientific programming\n  best practices\n\n\nThis is a developmental/forked version of code that was originally developed by NIDIS/NCEI/NOAA. \nSee [drought.gov](https://www.drought.gov/drought/python-climate-indices).\n\n- [__Documentation__](https://climate-indices.readthedocs.io/en/latest/)\n- [__License__](https://github.com/monocongo/climate_indices/blob/main/LICENSE)\n- [__Disclaimer__](https://github.com/monocongo/climate_indices/blob/main/DISCLAIMER)\n\n## Developer Workflow\n\nThis project uses trunk-based development. `main` is the trunk and should always\nbe releasable.\n\n1. Start from current trunk:\n   `git switch main \u0026\u0026 git pull --ff-only origin main`\n2. Create a short-lived branch:\n   `git switch -c feature/\u003cshort-topic\u003e`\n3. Make focused changes with tests.\n4. Run validation:\n   `uv run ruff check src/ tests/`\n   `uv run ruff format --check src/ tests/`\n   `uv run mypy src/`\n   `uv run pytest`\n5. Open a PR into `main`.\n6. Merge only after CI passes.\n\nUse `feature/\u003ctopic\u003e`, `fix/\u003ctopic\u003e`, `docs/\u003ctopic\u003e`, `chore/\u003ctopic\u003e`, or\n`hotfix/\u003ctopic\u003e` branch names. Release branches are avoided; use maintenance\nbranches only for approved older-version support.\n\n## Release Recipe\n\nReleases are tag-based. The Git tag, package version, GitHub Release, and PyPI\nversion must match.\n\n- Git tag: `v1.2.3`\n- Package version: `1.2.3`\n- GitHub Release: `v1.2.3`\n- PyPI release: `1.2.3`\n\n1. Prepare and merge a release PR that updates `pyproject.toml`, `CHANGELOG.md`,\n   and release notes/docs.\n2. Confirm `main` is green.\n3. Create an annotated tag from `main`.\n4. Push the tag. The release workflow builds, validates, publishes to PyPI, and\n   creates the GitHub Release.\n\nTag creation and publishing require maintainer approval. See\n[`docs/release-process.md`](docs/release-process.md) for the full checklist.\n\n### Maintainer Quick Commands\n\nRead-only preflight:\n\n```bash\ngit status --short\ngit branch --show-current\ngit log --oneline --decorate -5\nuv run pytest tests/test_release_integrity.py\n```\n\nSafe PR branch setup:\n\n```bash\ngit switch main\ngit pull --ff-only origin main\ngit switch -c chore/issue-667-release-docs\n```\n\nApproval-required release tag commands:\n\n```bash\ngit switch main\ngit pull --ff-only origin main\ngit tag -a vX.Y.Z -m \"Release vX.Y.Z\"\ngit push origin vX.Y.Z\n```\n\n## Supported Python Versions\n\n| Python Version | Status | Notes |\n|:--------------:|:------:|:------|\n| 3.10 | Supported | Minimum supported version |\n| 3.11 | Supported | |\n| 3.12 | Supported | |\n| 3.13 | Supported | |\n| 3.14 | Supported | Latest supported version |\n\nAll versions are tested on Linux (ubuntu-latest). Python 3.10 and 3.14 are additionally\ntested on macOS. Both latest and minimum declared dependency versions are tested in CI.\n\n### Version Support Policy\n\nThis project provides **12 months notice** before dropping support for a Python version.\nWhen a version approaches end-of-life, removal will be announced via the CHANGELOG and a\nGitHub issue, and implemented no sooner than 12 months after announcement with a version bump.\n\nPython 3.9 support was dropped in v2.2.0 (August 2025) due to `scipy\u003e=1.15.3` requiring 3.10+.\n\n### API Stability\n\n| API Surface | Status | Guarantee |\n|:------------|:------:|:----------|\n| NumPy array functions (`indices.spi`, `indices.spei`, `indices.pet`) | **Stable** | No breaking changes in minor versions |\n| xarray DataArray functions (`spi()`, `spei()`, `pet_thornthwaite()`, `pet_hargreaves()`) | **Beta** | No breaking changes in patch versions |\n\n**Stable API**: The NumPy-based computation functions follow strict semantic versioning.\n\n**Beta API**: The xarray adapter layer provides automatic parameter inference, coordinate\npreservation, CF metadata, and Dask support. While beta, computation results are **identical**\nto the stable NumPy API — only the interface surface (parameter names, metadata attributes,\ncoordinate handling) may evolve. Beta features are tagged with ``BetaFeatureWarning`` and\nmarked in docstrings.\n\nSee `docs/xarray_compatibility.md` for the v2.5 compatibility matrix, including\nDask chunking constraints, metadata behavior, and the current Palmer xarray\nworkflow.\n\n### Validation Notes\n\nThe v2.5 validation status is tracked in `VALIDATION.md`. EDDI has executable\nNOAA PSL reference tests, but those tests skip unless the external\n`tests/fixture/noaa-eddi-{1,3,6}month/` datasets are present. Palmer tests cover\nthe committed regression fixtures for PDSI, PHDI, PMDI, and Z-Index; those\nfixtures are not treated as independent authoritative reference outputs because\ntheir provenance identifies them as generated by this library.\n\n## Migration Guide for v2.2.0\n\n**Breaking Change: Exception-Based Error Handling**\n\nVersion 2.2.0 introduces a significant architectural improvement in error handling. The library now uses exception-based error handling instead of returning `None` tuples for error conditions.\n\n### What Changed\n\n**Before (v2.1.x and earlier):**\n```python\n# Old behavior - functions returned None tuples on failure\nresult = some_internal_function(data)\nif result == (None, None, None, None):\n    # Handle error case\n    pass\n```\n\n**After (v2.2.0+):**\n```python\n# New behavior - functions raise specific exceptions\ntry:\n    result = some_internal_function(data)\nexcept climate_indices.compute.InsufficientDataError as e:\n    # Handle insufficient data case\n    print(f\"Not enough data: {e.non_zero_count} values found, {e.required_count} required\")\nexcept climate_indices.compute.PearsonFittingError as e:\n    # Handle fitting failure case\n    print(f\"Fitting failed: {e}\")\n```\n\n### New Exception Hierarchy\n\n- `DistributionFittingError` (base class)\n  - `InsufficientDataError` - raised when there are too few non-zero values for statistical fitting\n  - `PearsonFittingError` - raised when L-moments calculation fails for Pearson Type III distribution\n\n### Impact on Users\n\n- **Direct API users**: No changes needed - the public SPI/SPEI functions handle exceptions internally\n- **Library integrators**: If you were checking for `None` return values from internal functions, update to use try/catch blocks\n- **Benefits**: More informative error messages, better debugging, and automatic fallback from Pearson to Gamma distribution when appropriate\n\n### Code Quality Improvements\n\nVersion 2.2.0 also addresses floating point comparison issues (`python:S1244`) throughout the codebase:\n\n**Floating Point Comparisons:**\n```python\n# ❌ OLD: Direct equality checks (unreliable)\nif values == 0.0:\n    handle_zero_case()\n\n# ✅ NEW: Safe comparison using numpy.isclose()\nif np.isclose(values, 0.0, atol=1e-8):\n    handle_zero_case()\n```\n\n**Benefits:**\n- Eliminates floating point precision issues in statistical parameter validation\n- Improves test reliability and numerical robustness\n- Follows scientific computing best practices for floating point arithmetic\n- See `docs/floating_point_best_practices.md` for comprehensive guidelines\n\n#### Citation\nYou can cite `climate_indices` in your projects and research papers via the BibTeX \nentry below.\n```\n@misc {climate_indices,\n    author = \"James Adams\",\n    title  = \"climate_indices, an open source Python library providing reference implementations of commonly used climate indices\",\n    url    = \"https://github.com/monocongo/climate_indices\",\n    month  = \"may\",\n    year   = \"2017--\"\n}\n```\n","funding_links":[],"readme_doi_urls":["http://dx.doi.org/10.2307/21073","http://dx.doi.org/10.13031/2013.26773"],"works":{"http://dx.doi.org/10.2307/21073":null,"http://dx.doi.org/10.13031/2013.26773":{"id":"https://openalex.org/W2003696872","doi":"https://doi.org/10.13031/2013.26773","title":"Reference Crop Evapotranspiration from Temperature","display_name":"Reference Crop Evapotranspiration from Temperature","publication_year":1985,"publication_date":"1985-01-01","ids":{"openalex":"https://openalex.org/W2003696872","doi":"https://doi.org/10.13031/2013.26773","mag":"2003696872"},"language":"en","primary_location":{"is_oa":false,"landing_page_url":"https://doi.org/10.13031/2013.26773","pdf_url":null,"source":{"id":"https://openalex.org/S199825796","display_name":"Applied Engineering in Agriculture","issn_l":"0883-8542","issn":["0883-8542","1943-7838"],"is_oa":false,"is_in_doaj":false,"host_organization":"https://openalex.org/P4320800553","host_organization_name":"American Society of Agricultural and Biological Engineers","host_organization_lineage":["https://openalex.org/P4320800553"],"host_organization_lineage_names":["American Society of Agricultural and Biological Engineers"],"type":"journal"},"license":null,"version":null,"is_accepted":false,"is_published":false},"type":"article","type_crossref":"journal-article","open_access":{"is_oa":false,"oa_status":"closed","oa_url":null,"any_repository_has_fulltext":false},"authorships":[{"author_position":"first","author":{"id":"https://openalex.org/A5085630609","display_name":"George H. Hargreaves","orcid":null},"institutions":[],"countries":[],"is_corresponding":false,"raw_author_name":"George H. Hargreaves","raw_affiliation_string":"","raw_affiliation_strings":[]},{"author_position":"last","author":{"id":"https://openalex.org/A5021493235","display_name":"Zohrab Samani","orcid":"https://orcid.org/0000-0002-3273-0599"},"institutions":[],"countries":[],"is_corresponding":false,"raw_author_name":"Zohrab A. Samani","raw_affiliation_string":"","raw_affiliation_strings":[]}],"countries_distinct_count":0,"institutions_distinct_count":0,"corresponding_author_ids":[],"corresponding_institution_ids":[],"apc_list":null,"apc_paid":null,"has_fulltext":true,"fulltext_origin":"ngrams","cited_by_count":2893,"cited_by_percentile_year":{"min":99,"max":100},"biblio":{"volume":"1","issue":"2","first_page":"96","last_page":"99"},"is_retracted":false,"is_paratext":false,"keywords":[{"keyword":"temperature","score":0.3682}],"concepts":[{"id":"https://openalex.org/C85871539","wikidata":"https://www.wikidata.org/wiki/Q734533","display_name":"Lysimeter","level":3,"score":0.94840145},{"id":"https://openalex.org/C176783924","wikidata":"https://www.wikidata.org/wiki/Q828158","display_name":"Evapotranspiration","level":2,"score":0.9220256},{"id":"https://openalex.org/C39432304","wikidata":"https://www.wikidata.org/wiki/Q188847","display_name":"Environmental science","level":0,"score":0.68160385},{"id":"https://openalex.org/C2777589951","wikidata":"https://www.wikidata.org/wiki/Q6073845","display_name":"Irrigation scheduling","level":3,"score":0.6265212},{"id":"https://openalex.org/C72551326","wikidata":"https://www.wikidata.org/wiki/Q5187947","display_name":"Crop coefficient","level":3,"score":0.60088706},{"id":"https://openalex.org/C88862950","wikidata":"https://www.wikidata.org/wiki/Q11453","display_name":"Irrigation","level":2,"score":0.5616112},{"id":"https://openalex.org/C76886044","wikidata":"https://www.wikidata.org/wiki/Q2883300","display_name":"Hydrology (agriculture)","level":2,"score":0.46312696},{"id":"https://openalex.org/C137660486","wikidata":"https://www.wikidata.org/wiki/Q732240","display_name":"Growing season","level":2,"score":0.45333606},{"id":"https://openalex.org/C66465714","wikidata":"https://www.wikidata.org/wiki/Q1148989","display_name":"Water balance","level":2,"score":0.43861634},{"id":"https://openalex.org/C6557445","wikidata":"https://www.wikidata.org/wiki/Q173113","display_name":"Agronomy","level":1,"score":0.24487883},{"id":"https://openalex.org/C159390177","wikidata":"https://www.wikidata.org/wiki/Q9161265","display_name":"Soil science","level":1,"score":0.13391718},{"id":"https://openalex.org/C18903297","wikidata":"https://www.wikidata.org/wiki/Q7150","display_name":"Ecology","level":1,"score":0.12926763},{"id":"https://openalex.org/C159750122","wikidata":"https://www.wikidata.org/wiki/Q96621023","display_name":"Soil water","level":2,"score":0.10600573},{"id":"https://openalex.org/C127413603","wikidata":"https://www.wikidata.org/wiki/Q11023","display_name":"Engineering","level":0,"score":0.076815724},{"id":"https://openalex.org/C86803240","wikidata":"https://www.wikidata.org/wiki/Q420","display_name":"Biology","level":0,"score":0.058563977},{"id":"https://openalex.org/C187320778","wikidata":"https://www.wikidata.org/wiki/Q1349130","display_name":"Geotechnical engineering","level":1,"score":0.0}],"mesh":[],"locations_count":1,"locations":[{"is_oa":false,"landing_page_url":"https://doi.org/10.13031/2013.26773","pdf_url":null,"source":{"id":"https://openalex.org/S199825796","display_name":"Applied Engineering in Agriculture","issn_l":"0883-8542","issn":["0883-8542","1943-7838"],"is_oa":false,"is_in_doaj":false,"host_organization":"https://openalex.org/P4320800553","host_organization_name":"American Society of Agricultural and Biological Engineers","host_organization_lineage":["https://openalex.org/P4320800553"],"host_organization_lineage_names":["American Society of Agricultural and Biological Engineers"],"type":"journal"},"license":null,"version":null,"is_accepted":false,"is_published":false}],"best_oa_location":null,"sustainable_development_goals":[{"id":"https://metadata.un.org/sdg/6","display_name":"Clean water and sanitation","score":0.27},{"id":"https://metadata.un.org/sdg/9","display_name":"Industry, innovation and infrastructure","score":0.16},{"id":"https://metadata.un.org/sdg/17","display_name":"Partnerships for the goals","score":0.15}],"grants":[],"referenced_works_count":0,"referenced_works":[],"related_works":["https://openalex.org/W2547596733","https://openalex.org/W2020602466","https://openalex.org/W176695133","https://openalex.org/W2073613654","https://openalex.org/W2526732096","https://openalex.org/W2387097233","https://openalex.org/W1996227453","https://openalex.org/W2921976897","https://openalex.org/W2994642906","https://openalex.org/W2622033277"],"ngrams_url":"https://api.openalex.org/works/W2003696872/ngrams","abstract_inverted_index":{"MEASURED":[0],"lysimeter":[1,61,96],"evapotranspiration":[2,19,85],"of":[3,16,31,36,59,71,145],"Alta":[4],"fescue":[5],"grass":[6,84],"(a":[7],"cool":[8,82],"season":[9,83],"grass)":[10],"is":[11,23,43],"taken":[12],"as":[13,128,132],"an":[14],"index":[15],"reference":[17],"crop":[18,153],"(ETo).":[20],"An":[21],"equation":[22,42,53],"presented":[24],"that":[25,112,122],"estimates":[26],"ETo":[27,72],"from":[28,63,98,134],"measured":[29,81],"values":[30,35,70,125],"daily":[32,60],"or":[33],"mean":[34],"maximum":[37],"and":[38,66,91,101,121,130,147,170],"minimum":[39],"temperature.":[40],"This":[41],"compared":[44],"with":[45,77,80,95,102],"various":[46,107],"other":[47,74,78,136],"methods":[48,79,138],"for":[49,73,106,140,151],"estimating":[50,137,152],"ETo.":[51],"The":[52],"was":[54],"developed":[55],"using":[56],"eight":[57],"years":[58],"data":[62,97,150],"Davis,":[64],"California":[65],"used":[67,139],"to":[68,165],"estimate":[69],"locations.":[75],"Comparisons":[76],"at":[86],"Aspendale,":[87],"Australia;":[88],"Lompoc,":[89],"California;":[90],"Seabrook,":[92],"New":[93],"Jersey;":[94],"Damin,":[99],"Haiti;":[100],"the":[103,113,123,135,143,173],"modified":[104],"Penman":[105],"locations":[108],"in":[109,156,172],"Bangladesh":[110],"indicated":[111],"method":[114,161],"usually":[115],"does":[116],"not":[117],"require":[118],"local":[119],"calibration":[120],"estimated":[124],"are":[126],"probably":[127],"reliable":[129,148],"useable":[131],"those":[133],"comparison.":[141],"Considering":[142],"scarcity":[144],"complete":[146],"climatic":[149],"water":[154],"requirements":[155],"developing":[157,174],"countries,":[158],"this":[159],"proposed":[160],"can":[162],"do":[163],"much":[164],"improve":[166],"irrigation":[167],"planning":[168],"design":[169],"scheduling":[171],"countries.":[175]},"cited_by_api_url":"https://api.openalex.org/works?filter=cites:W2003696872","counts_by_year":[{"year":2023,"cited_by_count":250},{"year":2022,"cited_by_count":281},{"year":2021,"cited_by_count":255},{"year":2020,"cited_by_count":289},{"year":2019,"cited_by_count":230},{"year":2018,"cited_by_count":174},{"year":2017,"cited_by_count":171},{"year":2016,"cited_by_count":158},{"year":2015,"cited_by_count":143},{"year":2014,"cited_by_count":128},{"year":2013,"cited_by_count":141},{"year":2012,"cited_by_count":131}],"updated_date":"2023-12-14T12:18:24.719616","created_date":"2016-06-24"}},"citation_counts":{"http://dx.doi.org/10.13031/2013.26773":2351},"total_citations":2351,"keywords_from_contributors":["gtk","qt","tk","wx"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/787","html_url":"https://ost.ecosyste.ms/projects/787"}