Metadata-Version: 2.4
Name: reserveai
Version: 1.0.0rc2
Summary: Python SDK for insureAI's ReserveAI API
Project-URL: issues, https://gitlab.com/insureai/engineering/sdk-res-py/-/issues
Project-URL: repository, https://gitlab.com/insureai/engineering/sdk-res-py
License-Expression: Apache-2.0
License-File: LICENSE.txt
Keywords: claims,insurance,insureAI,reserveai,reserving
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Financial and Insurance Industry
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Python: <3.15,>=3.10
Requires-Dist: httpx==0.28.*; python_version == '3.10'
Requires-Dist: httpx==0.28.*; python_version == '3.11'
Requires-Dist: httpx==0.28.*; python_version == '3.12'
Requires-Dist: httpx==0.28.*; python_version == '3.13'
Requires-Dist: httpx==0.28.*; python_version == '3.14'
Requires-Dist: nest-asyncio>=1.5.0; python_version == '3.10'
Requires-Dist: nest-asyncio>=1.5.0; python_version == '3.11'
Requires-Dist: nest-asyncio>=1.5.0; python_version == '3.12'
Requires-Dist: nest-asyncio>=1.5.0; python_version == '3.13'
Requires-Dist: nest-asyncio>=1.5.0; python_version == '3.14'
Requires-Dist: pyarrow<25,>=18; python_version == '3.10'
Requires-Dist: pyarrow<25,>=18; python_version == '3.11'
Requires-Dist: pyarrow<25,>=18; python_version == '3.12'
Requires-Dist: pyarrow<25,>=18; python_version == '3.13'
Requires-Dist: pyarrow<25,>=22; python_version == '3.14'
Requires-Dist: pydantic>=2.12.0; python_version == '3.10'
Requires-Dist: pydantic>=2.12.0; python_version == '3.11'
Requires-Dist: pydantic>=2.12.0; python_version == '3.12'
Requires-Dist: pydantic>=2.12.0; python_version == '3.13'
Requires-Dist: pydantic>=2.12.0; python_version == '3.14'
Requires-Dist: python-dateutil>=2.8.2; python_version == '3.10'
Requires-Dist: python-dateutil>=2.8.2; python_version == '3.11'
Requires-Dist: python-dateutil>=2.8.2; python_version == '3.12'
Requires-Dist: python-dateutil>=2.8.2; python_version == '3.13'
Requires-Dist: python-dateutil>=2.8.2; python_version == '3.14'
Requires-Dist: requests>=2.32; python_version == '3.10'
Requires-Dist: requests>=2.32; python_version == '3.11'
Requires-Dist: requests>=2.32; python_version == '3.12'
Requires-Dist: requests>=2.32; python_version == '3.13'
Requires-Dist: requests>=2.32; python_version == '3.14'
Requires-Dist: tabulate<0.10,>=0.8.10; python_version == '3.10'
Requires-Dist: tabulate<0.10,>=0.8.10; python_version == '3.11'
Requires-Dist: tabulate<0.10,>=0.8.10; python_version == '3.12'
Requires-Dist: tabulate<0.10,>=0.8.10; python_version == '3.13'
Requires-Dist: tabulate<0.10,>=0.8.10; python_version == '3.14'
Provides-Extra: all
Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.10') and extra == 'all'
Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.11') and extra == 'all'
Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.12') and extra == 'all'
Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.13') and extra == 'all'
Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.14') and extra == 'all'
Requires-Dist: openpyxl==3.1.*; extra == 'all'
Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.10') and extra == 'all'
Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.11') and extra == 'all'
Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.12') and extra == 'all'
Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.13') and extra == 'all'
Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.14') and extra == 'all'
Requires-Dist: pandas<3,>=2.2.3; (python_version == '3.10') and extra == 'all'
Requires-Dist: pandas<3,>=2.2.3; (python_version == '3.11') and extra == 'all'
Requires-Dist: pandas<3,>=2.2.3; (python_version == '3.12') and extra == 'all'
Requires-Dist: pandas<3,>=2.2.3; (python_version == '3.13') and extra == 'all'
Requires-Dist: pandas<3,>=2.3.3; (python_version == '3.14') and extra == 'all'
Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.10') and extra == 'all'
Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.11') and extra == 'all'
Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.12') and extra == 'all'
Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.13') and extra == 'all'
Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.14') and extra == 'all'
Requires-Dist: polars<2,>=1.25; (python_version == '3.10') and extra == 'all'
Requires-Dist: polars<2,>=1.25; (python_version == '3.11') and extra == 'all'
Requires-Dist: polars<2,>=1.25; (python_version == '3.12') and extra == 'all'
Requires-Dist: polars<2,>=1.25; (python_version == '3.13') and extra == 'all'
Requires-Dist: polars<2,>=1.25; (python_version == '3.14') and extra == 'all'
Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.10') and extra == 'all'
Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.11') and extra == 'all'
Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.12') and extra == 'all'
Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.13') and extra == 'all'
Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.14') and extra == 'all'
Provides-Extra: pandas
Requires-Dist: openpyxl==3.1.*; extra == 'pandas'
Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.10') and extra == 'pandas'
Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.11') and extra == 'pandas'
Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.12') and extra == 'pandas'
Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.13') and extra == 'pandas'
Requires-Dist: pandas-stubs<3,>=2.2; (python_version == '3.14') and extra == 'pandas'
Requires-Dist: pandas<3,>=2.2.3; (python_version == '3.10') and extra == 'pandas'
Requires-Dist: pandas<3,>=2.2.3; (python_version == '3.11') and extra == 'pandas'
Requires-Dist: pandas<3,>=2.2.3; (python_version == '3.12') and extra == 'pandas'
Requires-Dist: pandas<3,>=2.2.3; (python_version == '3.13') and extra == 'pandas'
Requires-Dist: pandas<3,>=2.3.3; (python_version == '3.14') and extra == 'pandas'
Provides-Extra: plotly
Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.10') and extra == 'plotly'
Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.11') and extra == 'plotly'
Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.12') and extra == 'plotly'
Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.13') and extra == 'plotly'
Requires-Dist: plotly<7,>=6.1.1; (python_version == '3.14') and extra == 'plotly'
Provides-Extra: polars
Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.10') and extra == 'polars'
Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.11') and extra == 'polars'
Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.12') and extra == 'polars'
Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.13') and extra == 'polars'
Requires-Dist: fastexcel<1,>=0.10; (python_version == '3.14') and extra == 'polars'
Requires-Dist: polars<2,>=1.25; (python_version == '3.10') and extra == 'polars'
Requires-Dist: polars<2,>=1.25; (python_version == '3.11') and extra == 'polars'
Requires-Dist: polars<2,>=1.25; (python_version == '3.12') and extra == 'polars'
Requires-Dist: polars<2,>=1.25; (python_version == '3.13') and extra == 'polars'
Requires-Dist: polars<2,>=1.25; (python_version == '3.14') and extra == 'polars'
Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.10') and extra == 'polars'
Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.11') and extra == 'polars'
Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.12') and extra == 'polars'
Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.13') and extra == 'polars'
Requires-Dist: xlsxwriter<4,>=3.0.5; (python_version == '3.14') and extra == 'polars'
Description-Content-Type: text/markdown

<div align="center">
  <h1>ReserveAI SDK</h1>
  <p>
    By <a href="https://www.insureai.co/">insureAI</a>
  </p>
</div>


<!-- -------------------------------------------------------------------------------------------------------------- -->
# 📔 Table of Contents

- [📔 Table of Contents](#-table-of-contents)
  - [🌟 About the Project](#-about-the-project)
  - [🎯 Features](#-features)
  - [🧰 Install](#-install)
  - [👀 Getting Started](#-getting-started)
  - [⚠️ License](#️-license)
  - [🤝 Contact](#-contact)
  - [💎 Acknowledgements and Citations](#-acknowledgements-and-citations)

<!-- -------------------------------------------------------------------------------------------------------------- -->
## 🌟 About the Project

The ReserveAI SDK (by [insureAI](https://www.insureai.co/)) provides exclusive access to a powerful new approach for
actuarial reserving. Designed to seamlessly integrate with [ReserveAI](https://reserveai.co/) and move beyond the 
limitations of traditional, static analysis, this toolkit introduces a systematic framework to address the core 
challenges of modern reserving: eliminating subjectivity, managing volatility, and providing a robust, defensible 
basis for your ultimate liability estimates.

At its core, the SDK allows you to effortlessly back-test thousands of model variations against your own data. Our
proprietary evaluation engine assesses each model on multiple dimensions of performance. This provides a holistic and
uniquely insightful view of model quality that conventional methods fail to capture. This SDK is designed for actuaries
and risk managers who need to conduct reserve reviews with greater confidence and efficiency. 

To get started, we recommend visiting our documentation:
  - The [Tutorials](https://sdk.docs.reserveai.co/) provide step-by-step examples on using the SDK.
  - The [FAQ](./docs/sphinx/faq/index.md) has quick answers to common questions.
  - The Methodologies which may be accessed after contacting [support@insureai.co](mailto:support@insureai.co).

<!-- -------------------------------------------------------------------------------------------------------------- -->
## 🎯 Features

  - **Run industry-standard actuarial methods**: Run reserving methods such as Cape Cod, Chain Ladder, and 
  Bornhuetter–Ferguson (with more methods in active development).

  - **Triangle data utilities**: Convenient representation of triangle datasets:
      - Switch between long or wide (triangle) views.
      - Plot standard reserving visuals.
      - Run quick diagnostics.
      
  - **Data science friendly**: Full interoperability with Pandas and Polars: input data and results can be seamlessly
  converted to and from dataframes. Thus, for more complex workflows, the full Python data science ecosystem can be
  brought to bear by extracting the underlying dataframes.

  - **Automated model exploration**: Each reserving run evaluates hundreds or thousands of model variations. The 
  models are returned for review, comparison, and deeper analysis.

  - **Rich model diagnostics**: Inspect detailed outputs for chosen models, including triangle projections, cubes, and
  performance metrics, to support robust reserve reviews.

  - **Server-side computation**: All reserving runs execute on ReserveAI’s secure servers; the SDK provides a
  lightweight yet seamless interface for managing runs and fetching results through the ReserveAI REST API.

  - **Multiple-line multiple-target support**: Run multiple reserving methods on multiple lines of business and
  multiple target variables simultaneously.

<!-- -------------------------------------------------------------------------------------------------------------- -->
## 🧰 Install

The SDK is available via PyPI, and hence can be installed using your preferred package manager:

  - Using `pip`:
  
    ```bash
    pip install reserveai[all]
    ```
  
  - Using `poetry`:
  
    ```bash
    poetry add reserveai[all]
    ```
  
  - Using `uv`:
  
    ```bash
    uv add reserveai[all]
    ```

There are several optional dependencies that can be installed using the `[optional]` extras syntax:

  - `pandas`: Installs the `pandas` dependency (e.g., `uv add reserveai[pandas]`).
  - `polars`: Installs the `polars` dependency.
  - `plotly`: Installs the `plotly` dependency.

These can be combined, e.g., `reserveai[polars,plotly]`. Use `reserveai[all]` to install all optional dependencies.

<!-- -------------------------------------------------------------------------------------------------------------- -->
## 👀 Getting Started

To use the SDK against the ReserveAI API, you'll need ReserveAI client credentials. To obtain these, please contact
us at [support@insureai.co](mailto:support@insureai.co). Don't have credentials yet? Not a problem — the notebooks in
the [tutorials and recipes](https://sdk.docs.reserveai.co/) section that show how to get started with
the SDK are already pre-rendered!

<!-- -------------------------------------------------------------------------------------------------------------- -->
## ⚠️ License

The ReserveAI SDK is distributed under the Apache License 2.0; see `LICENSE.txt` for more information. (That license
applies only to the SDK code; it does not grant any rights to insureAI's proprietary APIs, algorithms, or platforms.)

The use of the API (via the SDK, or directly) is subject to the [API Terms of Use](TODO).

<!-- -------------------------------------------------------------------------------------------------------------- -->
## 🤝 Contact

We are not actively accepting contributions at this time. However, if you encounter a bug, have a question, or wish to
report a security vulnerability, please reach out to us at [support@insureai.co](mailto:support@insureai.co).

<!-- -------------------------------------------------------------------------------------------------------------- -->
## 💎 Acknowledgements and Citations

We thank the Casualty Actuarial Society (CAS), Swiss Re, and SME data providers for making datasets available that aided the development of this SDK. Full data attributions are available in [The Actuary and IBNR Techniques: A Machine Learning Approach](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2704364) by Balona and Richman.


<!-- -------------------------------------------------------------------------------------------------------------- -->
