Metadata-Version: 2.4
Name: rangekeeper
Version: 1.0.0a1
Summary: Algorithmic modelling for project finance
Author: Daniel Fink
Maintainer-email: Daniel Fink <danfink@mit.edu>
License-Expression: MPL-2.0
Project-URL: Homepage, https://github.com/daniel-fink/rangekeeper
Project-URL: Documentation, https://github.com/daniel-fink/rangekeeper/tree/develop/docs#readme
Project-URL: Repository, https://github.com/daniel-fink/rangekeeper
Project-URL: Issues, https://github.com/daniel-fink/rangekeeper/issues
Project-URL: Changelog, https://github.com/daniel-fink/rangekeeper/blob/develop/CHANGELOG.md
Keywords: real estate,project finance,financial modelling,cash flow,discounted cash flow,scenario analysis,real options
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Financial and Insurance Industry
Classifier: Intended Audience :: Science/Research
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Office/Business :: Financial
Classifier: Topic :: Scientific/Engineering
Classifier: Typing :: Typed
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: py-moneyed<4,>=3.0
Requires-Dist: jsonschema<5,>=4.26
Requires-Dist: rfc3339-validator<0.2,>=0.1.4
Requires-Dist: pint>=0.24
Requires-Dist: tzdata>=2024.1; sys_platform == "win32"
Provides-Extra: bundle
Requires-Dist: pyarrow>=23.0.1; extra == "bundle"
Requires-Dist: duckdb<2,>=1.4.3; extra == "bundle"
Provides-Extra: calculations
Requires-Dist: polars<2,>=1.44; extra == "calculations"
Requires-Dist: numpy>=1.26; extra == "calculations"
Requires-Dist: scipy>=1.12; extra == "calculations"
Requires-Dist: pyxirr<0.11,>=0.10.7; extra == "calculations"
Provides-Extra: execution
Requires-Dist: numpy>=1.26; extra == "execution"
Requires-Dist: pyomo<7,>=6.10.1; extra == "execution"
Requires-Dist: highspy<2,>=1.15.1; extra == "execution"
Provides-Extra: yaml
Requires-Dist: PyYAML<7,>=6.0.2; extra == "yaml"
Dynamic: license-file

<img src="https://raw.githubusercontent.com/daniel-fink/rangekeeper/v0.8.72/walkthrough/resources/rangekeeper.jpg" alt="Rangekeeper" width="300">

# Rangekeeper

Rangekeeper is the modelling engine: a Python library for real estate financial
modelling, cashflow forecasting and scenario analysis. It separates project facts and equations in a
`Model`, investigation choices in a `Specification`, and finalized evidence in a
`Run`. Immutable revisions retain units, identity and provenance.

Known-data calculations support DCF analysis. The execution layer solves declared
finite affine equations with Pyomo/HiGHS and independently checks candidate outputs.
Public authoring APIs and C# Grasshopper components connect reviewed data and
design models to canonical records. Polars serves detached tables and CSV.

The `develop` branch can differ from the latest PyPI release. Install from source
with the installation guide, and use the upgrade guide to move from an earlier release.
The [package ownership and import guide](docs/concepts/architecture.md)
lists the current namespaces; `Model`, `Specification` and `Run` remain root imports.

| Project or guide | Start here |
| --- | --- |
| Python package | [Installation and extras](docs/guides/installation.md) |
| Contributing | [Formatting and writing conventions](docs/contributing/README.md) |
| Architecture and APIs | [Documentation index](docs/README.md) |
| Executable examples | [Examples and walkthroughs](docs/guides/examples.md) |
| Schema and generation | [Schema guide](docs/contributing/schema.md) |
| Rhino/Grasshopper | [Unsupported C# example](examples/grasshopper/README.md) |
| Older consumers | [Upgrade guide](docs/guides/upgrading.md) |
| Verification | [Checks and limits](docs/contributing/verification.md) |
| Conduct and citation | [Code of conduct](CODE_OF_CONDUCT.md), [citation metadata](CITATION.cff) |

The walkthroughs follow Geltner and de Neufville's
[Flexibility and Real Estate Valuation under Uncertainty](https://doi.org/10.1002/9781119106470).
Historical plans and captured acceptance results are linked from the documentation
index. The [retirement guide](docs/contributing/legacy-retirement.md) records the
removed predecessor runtime.

### Versions

| Line | Branch | Status |
| --- | --- | --- |
| 1.x | `develop` | In development. The API on this branch is not on PyPI yet. |
| 0.8.x | [`support/0.8`](https://github.com/daniel-fink/rangekeeper/tree/support/0.8) | Bug and security fixes only, until an announced end of life. |

Applications that use 0.8.x should declare `rangekeeper>=0.8.72,<0.9`. Then a
1.0 release on PyPI does not replace their version. [SECURITY.md](SECURITY.md)
lists the supported versions; the [release guide](docs/contributing/releasing.md)
gives the release procedure.

### Library boundary

Rangekeeper provides canonical models, schemas, validation, calculations,
execution, native IO and local display. Source ingestion services, access policy
and application interfaces are separate consumer responsibilities.

See the [breaking upgrade guide](docs/guides/upgrading.md). The walkthrough
lessons are in [`examples/walkthrough`](examples/walkthrough/README.md). See the
[walkthrough procedure](docs/guides/walkthroughs.md#branches-and-publication).
