Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ jobs:
working-directory: ${{ runner.temp }}
env:
RISKLABAI_REPOSITORY_ROOT: ${{ github.workspace }}
run: python -B -c "import os; from pathlib import Path; import RiskLabAI; origin = Path(RiskLabAI.__file__).resolve(); repository = Path(os.environ['RISKLABAI_REPOSITORY_ROOT']).resolve(); assert not origin.is_relative_to(repository), (origin, repository); assert RiskLabAI.__version__ == '3.1.0'; print(origin)"
run: python -B -c "import os; from pathlib import Path; import RiskLabAI; origin = Path(RiskLabAI.__file__).resolve(); repository = Path(os.environ['RISKLABAI_REPOSITORY_ROOT']).resolve(); assert not origin.is_relative_to(repository), (origin, repository); assert RiskLabAI.__version__ == '3.2.0'; print(origin)"
- name: Run the installed base package tests
working-directory: ${{ runner.temp }}
run: python -B -m pytest -q -p no:cacheprovider -c "$GITHUB_WORKSPACE/pyproject.toml" "$GITHUB_WORKSPACE/test"
Expand Down Expand Up @@ -91,7 +91,7 @@ jobs:
working-directory: ${{ runner.temp }}
env:
RISKLABAI_REPOSITORY_ROOT: ${{ github.workspace }}
run: python -B -c "import os; from pathlib import Path; import RiskLabAI; origin = Path(RiskLabAI.__file__).resolve(); repository = Path(os.environ['RISKLABAI_REPOSITORY_ROOT']).resolve(); assert not origin.is_relative_to(repository), (origin, repository); assert RiskLabAI.__version__ == '3.1.0'; print(origin)"
run: python -B -c "import os; from pathlib import Path; import RiskLabAI; origin = Path(RiskLabAI.__file__).resolve(); repository = Path(os.environ['RISKLABAI_REPOSITORY_ROOT']).resolve(); assert not origin.is_relative_to(repository), (origin, repository); assert RiskLabAI.__version__ == '3.2.0'; print(origin)"
- name: Run the installed optional-feature tests
working-directory: ${{ runner.temp }}
run: python -B -m pytest -q -p no:cacheprovider -c "$GITHUB_WORKSPACE/pyproject.toml" "$GITHUB_WORKSPACE/test"
Expand Down
33 changes: 32 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,38 @@
All notable changes to RiskLabAI.py are documented here.
Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versioning: [SemVer](https://semver.org/).

## [3.1.0] - Unreleased
## [3.2.0] - Unreleased

### Added

- Sequential bootstrap sampling, majorization-based optimization, financial
network clearing, and optimal execution utilities.
- Ambiguity calculations for supplied priors, order-flow features, regime and
drift adaptation, and tail-risk estimation and backtesting.
- Constrained and robust portfolio optimization and decision-focused losses.
- Causal bounds, finite-stratum transport, design-based interference, and
inverse-probability and doubly robust policy evaluation.
- PyTorch implementations of TimeGAN, deep hedging, and finite-grid neural SDEs.
- Analytical examples, independent numerical checks, boundary validation, and
regression tests for the new methods.

### Fixed

- Sample-concurrency counting for events that begin before the selected window.

### Scope and dependencies

- The neural-SDE implementation uses an explicitly corrected fixed-coordinate
diffusion operator rather than the literal published nearest-frame
construction. Its guarantees are bounded to the implemented finite grid;
general dynamic no-arbitrage and empirical market performance are not claimed.
- Required dependencies and supported Python versions are unchanged. PyTorch
is available through the existing `pde` extra. Selected new methods require
separately installed CVXPY, River, or PySensemakr; these remain optional.
- The additions are Python implementations. Corresponding Julia additions and
book notebooks are deferred.

## [3.1.0] - Historical preparation notes

### Added

Expand Down
16 changes: 14 additions & 2 deletions INSTALLATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Supported environments

RiskLabAI 3.1.0 supports:
RiskLabAI 3.2.0 supports:

- CPython 3.12, 3.13, and 3.14
- NumPy `>=2.2,<3`
Expand Down Expand Up @@ -73,7 +73,7 @@ The groups provide:
| Extra | Capability |
|---|---|
| `speed` | Numba acceleration |
| `pde` | Deep-BSDE PDE solver using PyTorch |
| `pde` | PyTorch support for Deep-BSDE, neural SDEs, TimeGAN, and deep hedging |
| `synth` | synthetic-control utilities using QuantEcon |
| `hpo` | hyperparameter tuning using Optuna |
| `plot` | Matplotlib, Seaborn, and Plotly helpers |
Expand All @@ -100,6 +100,18 @@ Notes:
- PyWavelets is part of the base installation because its absence changes
analytical behavior rather than only disabling acceleration.

## Additional method dependencies

Selected methods added in 3.2.0 use CVXPY (constrained or robust optimization),
River (ADWIN drift adaptation), or PySensemakr (sensitivity analysis).
These packages are installed separately when needed; they are not base
dependencies or named extras. Local Python 3.13 validation used CVXPY 1.9.3,
River 0.26.1, and PySensemakr 0.0.8. This does not establish compatibility with
every version of those packages or every supported interpreter.

The 3.2.0 version is a release candidate until published. An unpinned PyPI
installation retrieves the latest published version.

## Development installation

Clone the repository, switch to a supported Python version, and run the
Expand Down
Loading
Loading