Repository navigation
modeleon 0.2.3 - #4
Merged
Merged
Conversation
added 2 commits
October 26, 2026 13:27
A parametrized case with a 32,767-character expected string gets a short id (pytest writes the id to an environment variable, which Windows caps at 32,767 characters), and a test checks an expression by its parts rather than with ==, which since Python 3.13 compares dataclass fields without the identity shortcut.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release 0.2.3.
IFERROR,ISERROR,ISNUMBER,XOR,IFS,SWITCH); rounding, powers and logarithms (ROUNDUP,CEILING,POWER,SQRT,LN,PRODUCT, …); loan schedules and depreciation (NPER,RATE,IPMT,PPMT,CUMIPMT,CUMPRINC,SLN,DB,DDB,SYD); dates (DATEDIF,WEEKDAY,WEEKNUM,NETWORKDAYS,WORKDAY); text (LEFT,MID,FIND,SUBSTITUTE,TEXT,TEXTJOIN, …); conditional sums and counts (SUMIF(S),COUNTIF(S),AVERAGEIF(S),MAXIFS,MINIFS,COUNT,COUNTA); lookups (XLOOKUP,INDEX,MATCH,VLOOKUP,HLOOKUP); and statistics (MEDIAN,STDEV_S,VAR_S,PERCENTILE_INC,QUARTILE_INC,LARGE,SMALL,RANK_EQ, …).mo.time, header formulas and totals columns; a day sheet totals by month;modeleon.core.calendarandperiod_bounds/year_back_indexgive each period's dates to your own code.with mo.applied_view(model.board): model.to_excel(path)writes the same model under another look.a + bdoes — in Python and in the workbook.bpsorppcount beside a%fraction is refused; a recurrence is in its start's unit; a unit with several slashes reads as written.closing[-1]), a container cannot hold itself, a view hung where nothing reads it warns with the slot to use, a grain or totals kind the engine does not know is refused where it is given, and more.Behaviour changes:
mo.SUM(a, b)andmo.AVERAGE(a, b)over two or more series now work period by period (a subtotal,=SUM(C5, C9)in each column); the total of several rows over all their periods ismo.SUM(a) + mo.SUM(b). A model that mixed units in a function, a comparison, a lag's fill or a loan's amounts, or added abps/ppcount to a%fraction, is refused with a message that names the fix. A line on another time window is read by date; one that does not cover the combined window needs a rule,extend=mo.zero()orextend=mo.hold()..shift(n, fill_value=<line>)writes the fill as a live cell.The full list is in
CHANGELOG.md.