All notable changes to this project will be documented in this file.
- Removed committed docs output that caused GitHub Pages 404; docs now built and deployed exclusively via GitHub Actions on tag push
LifeTable.to_frame()— exports the life table as a Polars DataFrame with columnsage,qx,px,lx,dx,mxfor joining against policy-level DataFrames in actuarial projection enginesMultiDecrementTable— two-decrement table combining mortality and lapse using the UDD approximation; exposesqx_d,qx_w,qx_tau,px_tau,lx_tau,dx_d,dx_w,npx_tau, andto_frame()- Codecov integration for coverage reporting
- Migrated build backend from
hatchlingtouv_build - Migrated dependency management from
hatchtouv - Migrated project to
src/layout; tests moved fromtest/totests/ - Expanded ruff lint rules to include
I(isort),UP(pyupgrade),B(bugbear), andANN(annotations) - Replaced
Union[X, Y]andTupleannotations with modernX | Yand built-in generics throughout - Replaced Black badge with Ruff badge in README
- Replaced Travis CI badge with GitHub Actions badge
makefunruntime dependency — replaced withfunctools.wrapsand__wrapped__traversal for stacked decorator supportmockdev dependency —unittest.mockfrom the standard library is sufficientpylintdisable comments
- Refactored GitHub Actions publish workflow
- Fixed missing checkout version in GitHub workflows
- GitHub Actions CI/CD pipeline for lint, test, and PyPI publish
- Project
Makefilefor common development tasks pre-commitconfiguration with ruff
- Migrated from
setup.pytopyproject.toml - Switched dependency management to
uv - Reorganised docs directory for GitHub Pages
- Travis CI configuration
pylint
- NumPy-backed
LifeTablefor significantly faster actuarial calculations - Vectorised
expected_present_valuesupporting variable cashflows, probabilities, and interest rates including 2D array batch evaluation - Bounds handling for ages and intervals beyond the table size
LifeTableinternals rewritten to use NumPy arrays (qxs,pxs,lxs,dxs,mxsare nownumpy.ndarray)- Applied Black code formatting throughout
- Moved input validators to a dedicated
elizur.life.util.validatorsmodule - Reorganised package structure to reduce
__init__.pycomplexity
- Corrected
tqxndocstring
- Added missing
long_description_content_typeto package metadata for correct PyPI rendering
LifeTablewith full single-decrement actuarial functions:qx,px,lx,dx,ex,mx,nqx,npx,nlx,ndx,nmx,tqxn- Commutation functions:
Dx,Nx,Sx,Cx,Mx,Rx - Actuarial present value functions:
Ax,Axn,IAx,IAxn,ax,axn,ax_due,axn_due - Annuity functions:
annuity_pv,annuity_due_pv,annuity_fv,annuity_due_fv,perpetuity_pv,perpetuity_due_pv,increasing_annuity_pv,decreasing_annuity_pv,geo_increasing_annuity_pv - SOA CSV mortality table reader (
read_soa_csv_mort_table) discount_factor,discount_rate,interest_rateutility functions