{"id":34083580,"url":"https://github.com/richardlaugesen/ruvpy","last_synced_at":"2026-04-08T12:31:30.558Z","repository":{"id":258164878,"uuid":"643768492","full_name":"richardlaugesen/ruvpy","owner":"richardlaugesen","description":"Reference implementation of the Relative Utility Value metric for forecast value assessment","archived":false,"fork":false,"pushed_at":"2025-12-19T20:54:29.000Z","size":35384,"stargazers_count":0,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-14T10:18:51.939Z","etag":null,"topics":["climate","decision-science","environmental-modelling","forecast-assessment","forecast-evaluation","forecast-value","forecast-verification","forecasting","model-validation","modelling","open-science","relative-utility-value","ruv","verification","water","weather"],"latest_commit_sha":null,"homepage":"https://doi.org/10.1016/j.envsoft.2025.106697","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/richardlaugesen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-05-22T05:52:55.000Z","updated_at":"2025-10-31T03:18:00.000Z","dependencies_parsed_at":"2024-10-17T22:14:09.196Z","dependency_job_id":"6c8fd829-8ec0-433f-a7de-a7b8d178456f","html_url":"https://github.com/richardlaugesen/ruvpy","commit_stats":null,"previous_names":["richardlaugesen/ruvpy"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/richardlaugesen/ruvpy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richardlaugesen%2Fruvpy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richardlaugesen%2Fruvpy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richardlaugesen%2Fruvpy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richardlaugesen%2Fruvpy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/richardlaugesen","download_url":"https://codeload.github.com/richardlaugesen/ruvpy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/richardlaugesen%2Fruvpy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31556228,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T10:21:54.569Z","status":"ssl_error","status_checked_at":"2026-04-08T10:21:38.171Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["climate","decision-science","environmental-modelling","forecast-assessment","forecast-evaluation","forecast-value","forecast-verification","forecasting","model-validation","modelling","open-science","relative-utility-value","ruv","verification","water","weather"],"created_at":"2025-12-14T12:48:17.045Z","updated_at":"2026-04-08T12:31:30.550Z","avatar_url":"https://github.com/richardlaugesen.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RUVPY\n\n[![Tests](https://github.com/richardlaugesen/ruvpy/actions/workflows/python-package.yml/badge.svg)](https://github.com/richardlaugesen/ruvpy/actions/workflows/python-package.yml)\n![Coverage](https://img.shields.io/badge/dynamic/json?color=green\u0026label=Coverage\u0026query=$.files[%27coverage.json%27].content\u0026url=https://api.github.com/gists/a08622619e06b2157bee092f47e404d9)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)](CODE_OF_CONDUCT)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.13939198.svg)](https://doi.org/10.5281/zenodo.13939198)\n\n[Open Science](https://en.wikipedia.org/wiki/Open_science) infrastructure written in [Python](https://python.org/).\n\nRUVPY is a library which can be used in your software to quantify the value of forecast information for decision-making.\n\nIt is a reference implementation of the Relative Utility Value (RUV) method, which is very flexible and can accommodate a wide range of decisions.\n\nIt includes a set of commonly used decision rules, utility functions, damage functions, and economic models.\nThe implementation is sufficiently computationally efficient for most situations and optionally parallelises timesteps over available CPU cores (single core by default).\nThe primary focus of this implementation is clarity and flexibility.\n\nThe scope is intentionally narrow and does not include any figure generation, data loading and saving, other metrics, or analysis functionality. \nThese functions are intended to be implemented in a larger workflow or analysis pipeline which calls the main entry point of this library. \n\n## Publications\n\nThe method and software package are introduced in detail in the following publications. We suggest reading these to understand the context and motivation for the software.\n\n*Laugesen, R., Thyer, M., McInerney, D., \u0026 Kavetski, D. (2025), Software Library to Quantify the Value of Forecasts for Decision-Making: Case Study on Sensitivity to Damages, Environmental Modelling and Software, https://doi.org/10.1016/j.envsoft.2025.106697*\n\n*Laugesen, R., Thyer, M., McInerney, D., and Kavetski, D. (2023), Flexible forecast value metric suitable for a wide range of decisions: application using probabilistic subseasonal streamflow forecasts, Hydrol. Earth Syst. Sci., 27, 873–893, https://doi.org/10.5194/hess-27-873-2023*\n\n## Installation\n\nThe package is available on PyPI and can be installed using pip:\n\n    pip install ruvpy\n\n## Documentation\n\nGenerated documentation is available at https://richardlaugesen.github.io/ruvpy/ruvpy/.\n\n## Examples\n\nThe package includes a set of examples corresponding to each figure in the publications noted above. \nThese are all implemented as Jupyter notebooks in the `examples` directory.\n\n## Templates\n\nRUV is designed to be tailored to the decision being evaluated. \nThis may require the development of custom components to define the decision context in RUVPY. \nA set of templates to help you get started is included in `templates` directory.\n\nPlease consider [contributing](CONTRIBUTING.md) your new components to the repository to help others.\n\n## Development\n\nThe main package requires Python (\u003e=3.10), NumPy, SciPy, and Pathos.\nThe examples additionally require XArray, Pandas, Jupyter, and Matplotlib; the tests require Pytest and Statsmodels,\nand generating docs requires pdoc3.\n\nAll dependencies are defined in an included pyproject.toml file ready for use with [Poetry](https://python-poetry.org/) \nor Setuptools.\n\nFor example, once Poetry is installed you can set up the environment with:\n\n    poetry install --with dev\n\nYou may spawn a new shell with the virtual environment using ``poetry shell``,\nor simply prefix commands with ``poetry run``. To run the unit tests:\n\n    poetry run pytest\n\nTo run the examples you'll need the optional ``examples`` dependencies. Install\nthem and start Jupyter with:\n\n    poetry install -E examples\n    poetry run jupyter notebook\n\nRegenerate documentation using:\n\n    poetry run pdoc --html --output-dir docs ruvpy --force\n\nTo release a new version. Ensure everything is up to date and docs are built then bump the version in \nthe `pyproject.toml` and `CITATION.cff` file. Commit and push to Github before creating a new version tag and \nrelease in the browser. Run `poetry build` and `poetry publish` to push new release to PyPi. \n\n## Attribution\n\nThis project is licensed under the [Apache License 2.0](LICENSE), which allows free use, modification, and distribution of the code.\n\nWe would like to acknowledge and thank everyone who has helped this project in various ways. Please see the [CONTRIBUTORS](CONTRIBUTORS) file for a full list of individuals.\n\nFor proper citation of this project, please refer to the [CITATION.cff](CITATION.cff) file, which provides guidance on \nhow to cite the software. Please also consider citing the publications listed above.\n\n## Code of conduct\n\nWe encourage you to [contribute](CONTRIBUTING.md)! Everyone interacting with this project is expected to follow the [Code of Conduct](CODE_OF_CONDUCT.md).\n\n## Contact\n\nRichard Laugesen ([richard@laugesen.com.au](mailto://richard@laugesen.com.au))\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frichardlaugesen%2Fruvpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frichardlaugesen%2Fruvpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frichardlaugesen%2Fruvpy/lists"}