v2.5.0: an example that runs
A documentation release. No formula and no defined name's behaviour differs from v2.4.0.
nb.TimelineOffsetλ's worked example could not be run as printed
The call was missing the two closing brackets that finish EDATE and the function call itself, so copying the one line a reader is meant to copy got a syntax error rather than an answer. The Result column beside it was empty, where every other example in the library prints what it returns, which is how the missing brackets went unseen: there was no answer to disagree with.
Before
Result →Formula (nb is assumed to be the module's name)
→=nb.TimelineOffsetλ("15/2/2024", EDATE("1/1/2025", SEQUENCE( , 12, 0)
After
Result →Formula (nb is assumed to be the module's name)
1 →=nb.TimelineOffsetλ("15/2/2026", EDATE("1/1/2026", SEQUENCE( , 12, 0)))
-11 →=nb.TimelineOffsetλ("15/2/2025", EDATE("1/1/2026", SEQUENCE( , 12, 0)))
Two rows now, against the same 1 January 2026 timeline the demonstration sheet builds, one date inside it and one before it, because a date falling before a model's timeline is what the function's own discussion comment is written for. Upstream wrote the example against 2/15/2022 and a timeline starting 1/1/2023, and the date sweep moved both forward two years with everything else, which still left it two years behind the rest of the sample data.
tools/excel_selftest.ps1 runs both examples and holds them to their printed results, 1 and -11, so the printed answer cannot drift from the call beside it again. 197 assertions, up from 195.
The parameter table above the example spelled "timline" and now spells the word the function is named after.
Verification
| Gate | Result |
|---|---|
verify_workbook |
130 functions, 211 parts |
verify_sources |
src reproduces all 130, every date conversion read |
verify_signatures |
117 signatures, 122 parameter tables, 119 example blocks |
verify_previous_names |
130 one-to-one against v1.2.6 |
verify_cache |
all 20,224 cached values match their formulas |
excel_selftest |
197 of 197, 1,129 formulas, 0 error cells |
Whole-workbook cell diff against v2.4.0: five cells, all of them on the sheet that displays this function's own help.
Known and not fixed
nb.TimelinePositionλ's parameter table carries the same "timline" spelling.nb.Allocateλaccumulates its result withHSTACKinside aREDUCE, which rebuilds the whole accumulator on every pass. It is quick at any sane input and quadratic at a large one, andnb.Depreciateλdoes not check that a life in years is a life rather than a date serial, so a mistyped argument stops responding rather than returning an error.nb.Amortiseλandnb.Depreciateλeach hold their own copy of the months-per-period rounding and fail on sub-monthly timelines.nb.InterestLRVλis not cap-aware, so in the one period where the cap binds it understates the interest it reports. Balances are unaffected.- The repository still states no licence for its own tooling.
Asset
nabla.xlsx, 435,862 bytes, sha256 912263caa3661d1efefa59ebe0cb78414db4a283c9878fe1732b703727242fa3.