Developers#
Rateslib is a project designed for Python built with Python and Rust. To actively develop it and submit pull requests (PRs) to the repo you will need to set up a development environment.
1) Get the files
Clone the repository and navigate to the directory.
/>$ git clone https://github.com/attack68/rateslib.git
/>$ cd rateslib
2) Setup Python and Rust
It is recommended to install Python 3.12 and Rust 1.80.
Create and activate a virtual Python environment, as below (or the equivalent for Windows).
rateslib/>$ python3 -m venv venv
rateslib/>$ source ./venv/bin/activate
3) Install development requirements
Install the package dependencies for development and then install rateslib locally in editable mode.
(venv) rateslib/>$ pip install -r requirement.txt
(venv) rateslib/>$ pip install -e .
4) Test your environment
After installing everything test that everything is successful.
(venv) rateslib/>$ pytest
5) Making changes
You can now edit and make code changes and submit them for addition to the package. The continuous integration (CI) checks on github perform 7 tasks:
Rust Checks
If you do not make changes to the Rust section of the code these will remain unaffected. If you do it will run:
cargo fmt --check
: to ensure that rust code is properly formatted. If you need to make auto-formatting changes then run the following before committing:(venv) rateslib/>$ cargo fmt
cargo test --lib
: to ensure that any introduced code does not impact the pre-existing unit tests for the existing codebase. To check this before committing run:(venv) rateslib/>$ cargo test --lib
cargo test --doc
: to ensure that any introduced code does not impact the pre-existing tests in the rust documentation. To check this before committing run:(venv) rateslib/>$ cargo test --doc
If you made changes to the Rust section then you must rebuild the PyO3 extension module before testing it works in Python. To do this run:
(venv) rateslib/>$ maturin develop --release
Python Checks
If you make changes to the Python section of the code it will run:
ruff check
: to ensure that no styling or linting errors have been introduced. You may be able to auto-fix any of these before committing by using:(venv) rateslib/>$ ruff check --fix
ruff format
: to ensure that the Python code is correctly formatted. If the CI reports errors you can auto-format your code by locally running:(venv) rateslib/>$ ruff format
coverage run -m pytest
: this runs all the pytests and measures the coverage report of the codebase which should remain > 96%. You can this locally also before committing by using:(venv) rateslib/>$ coverage run -m pytest
Building Documentation
The documentation is built with Sphinx and its extensions. To locally build the documentation to debug or visualise any changes before submission, run:
(venv) rateslib/>$ cd docs (venv) docs/>$ make clean (venv) docs/>$ make html
In order to build docs without error you will also need to install pandoc.
In order to generate inheritance diagrams you will need to install graphviz.
Development Plan#
In no particular order…
Feature |
Description |
---|---|
Rust extension |
Continue to port classes to Rust with PyO3 extension module, also simultaneously working towards stabilising a standalone crate for Rust for linear fixed income. |
Swaptions |
Plan the design architecture and implementation for Swaptions and IRVolCube |
Credit Default Swaps |
Add a CDS Instrument and also think about Curve transformation methods for analysis between credit discount curves and hazard rates / survival curves. |
Specifications for standard products |
Extend the |
Documentation |
Broaden the array of available tutorials, especially in regards to Bond analysis, credit analysis and Index analysis. |
PnL Monitoring |
Provide an automated PnL explain from multiple Solvers (i.e “open” and “close”) |
Serialisation |
Continue to enhance the Serialisation aspect of objects. This feature will naturally develop with the Rust extension since stronger typing provides a much more rigid framework for data manipulation. |
Interactivity |
Expand the available tutorials for interactivity, such as using Excel, Jupyterlite, or app packages, such as Streamlit, Dash, Panel. |
Documentation |
Release v2 of “Coding Interest Rates” which contains all of the mathematics and architecture changes since version 1.0.0. |