lifelib v0.17 Releases#
To update lifelib, run the following command:
>>> pip install lifelib --upgrade
If you’re using Anaconda, use the conda command instead:
>>> conda update lifelib
lifelib v0.17.0 (13 September 2026)#
New Library#
This release adds a new library, frlib.
frlib packages nine reference liability cash flow projection
models for the individual life insurance products sold in France, and,
for each model, the product specification and technical notes it was
built from. See the frlib page for more details.
The three savings models are Euro_FR_S (assurance vie on the
guaranteed fonds en euros), UC_FR_S (unit-linked assurance vie)
and EC_FR_S (eurocroissance). The two retirement models are
PER_FR_S (the loi PACTE retirement plan) and Rente_FR_S (the
immediate life annuity it pays into). The four protection models are
TD_FR_S (temporaire deces, individual term life), ADE_FR_S
(assurance emprunteur, creditor insurance), Obseques_FR_S (funeral
cover) and Dep_FR_S (dependance, long-term care). The grid letters
follow the same convention as the other reference libraries, and all
nine models run on a monthly projection step and project one model
point at a time.
What separates the coverage from uslib’s, uklib’s and
jplib’s is that the savings side dominates. Assurance vie is
France’s savings vehicle rather than one product among several, so
three of the nine slots go to it and its eurocroissance hybrid, a
fourth to the PER that the loi PACTE built on the same chassis, and a
fifth to the rente viagere they pay out into. The split between the
two supports is the first fact about any French life balance sheet:
the insurer carries the investment risk on the fonds en euros, where
the effet cliquet makes each year’s credited return permanent, and
guarantees only the number of units on the unites de compte. On the
protection side, assurance emprunteur, the cover a French borrower
buys with a mortgage, is the largest individual protection market in
the country and has no counterpart in either sibling library. Group
business, epargne salariale and Luxembourg contracts are out of scope.
Three mechanisms in the library have no analogue anywhere else in lifelib. The euro fund carries its provision pour participation aux benefices as a per-vintage ledger, so the eight-year statutory release clock is a real deadline on each year’s allocation rather than an average over all of them. Eurocroissance splits the account between a provision mathematique accumulating at the taux technique toward a guarantee that bites only at the echeance and a provision de diversification carrying the upside in parts, so a surrender before term pays the current part value with no guarantee at all. And the creditor insurance model projects the amortising loan it covers, paying the outstanding balance times the insured share on death and total disability while the incapacity benefit pays the instalment after a waiting period, under age limits that differ by guarantee, so cover can end before the loan does.
frlib is shaped exactly like its three siblings. Each model
projects one product’s gross liability cash flows, such as premiums,
claims, surrenders, expenses and charges, on the product’s own
processing order and timing. None of the models discounts, so
discounting, the technical provisions and capital are left to a layer
that consumes the cash flows. Every model has the same two Spaces:
Data, which reads the input files, and Projection, which is
parameterized by point_id. The inputs are CSV files kept outside
the model folder so that they can be edited or swapped in place.
Beside each model sit the documents it was built from:
product-spec.md, a representative product specification composed
from publicly available documentation of real products;
technical-notes.md, the liability cash flow model on paper, with
state variables, recursions, processing order and a numeric worked
example; model.md, how the model implements those notes; and
sources.md, every source cited. The tests ship inside the library
and run against your own copy: each model reproduces the worked
example in its technical notes, and
tests/test_model_conventions_fr.py asserts the shared model
structure and Cells names across all nine models.
Warning
frlib is in its draft stage, and its contents are subject to
change as development continues.
Warning
The frlib models are mechanics demonstrations, not pricing or
reserving results. The contractual side is sourced unusually well,
because French contract law and the Code des assurances are
published in full, so the participation aux benefices machinery,
the eurocroissance provisions and the loi Lemoine substitution
rights are taken from the instruments themselves rather than from
commentary. Every decrement basis shipped here, on the other hand,
is a standardization. The mortality tables a French insurer must
use are annexed to an arrete and are cited by name throughout, but
this library does not redistribute them; experience tables
certified by an actuary are by construction not public; and there
is no published rate card at all, because French pricing is
quote-driven and the encadre a contract must carry discloses charge
maxima rather than levels. Replace both with company data before
drawing any conclusion from the numbers.
Changes#
The models in
uslib,uklibandjplibnow run on a 0-based time index, sot = 0is the first projection step rather than the point before it, and the last eight models that stepped annually are converted to a monthly grid. Withfrlibarriving on the same convention, all 37 models in the four reference libraries now share one grid.Because the grid letter is part of the model name, the eight converted models are renamed with it:
Term_US_A,WholeLife_US_A,Term_UK_A,WP_UK_A,Term_JP_A,WholeLife_JP_A,Endowment_JP_AandAnnuity_JP_AbecomeTerm_US_S,WholeLife_US_S,Term_UK_S,WP_UK_S,Term_JP_S,WholeLife_JP_S,Endowment_JP_SandAnnuity_JP_S. The release notes for v0.14, v0.15 and v0.16 keep the old names, because they record what those releases shipped.A monthly grid is not the same thing as a monthly product. Where a product’s contractual drivers are annual, the models keep those events on the policy anniversary and derive the policy year from
t. What the finer grid resolves is everything that is not a contractual event: decrements falling in the month they happen, account values accruing month by month so a mid-term exit is valued on the balance it actually has, and expenses and premium instalments falling where they are incurred.The Libraries page is grouped into three titled categories, Generic Liability Models, Reference Liability Models and Miscellaneous Models, each with its own introduction and table, and the sidebar menu shows the same separators. The past libraries are now listed in a table in the same format as the rest of the page.
The test suite in the repository that exports every model with
Model.exportand checks the exported package against the model it came from now dispatches on what each published statement actually is, instead of assuming every one returns a DataFrame, and asserts that the model and the export return the same type before comparing values.PER_FR_S.result_settlementreturns a Series and is the only one of the 102 statements across all 37 models that does.