v1.12.0 2026-09-26 |
Features
highlight_level emphasizes one focal indifference curve while the remaining levels use a subdued secondary style
secondary_stroke and theme fields control secondary curve colour, width, and opacity
- Numeric and ordinal labels (u1, u2, ...) follow the local curve angle and avoid the plot boundary
Changes
- Focal and secondary labels share the theme's indifference-curve label style; smooth, linear, kinked, and satiation preferences remain supported
|
v1.11.0 2026-09-26 |
Features
- Complete theme coverage for diagram backgrounds, labels, strokes, markers, and auxiliary economic lines
- Add
paper, monochrome, presentation, and dark built-in themes
- Add theme-level
background_color and label_scale controls
|
v1.10.1 2026-09-26 |
Maintenance
- Add Ruff linting and formatting plus Mypy type checking to contributor tooling and CI
- Publish
econ-viz as a PEP 561 typed package with py.typed
- Standardize public exception messages in English
Bug fixes
- Fix a missing NumPy import in contour-level annotations
- Bind each Edgeworth Pareto-search closure to its own weight
|
v1.10.0 2026-09-26 |
Features
Config loads diagram settings from an econ-viz.toml file; Config.load(...).use() makes them the default
econ-viz init writes a commented settings template, and econ-viz plot --config reads it
Changes
- Diagrams take their theme and fonts from the active
Config when none is passed; without one the output is unchanged
tomli is required on Python 3.10
|
v1.9.0 2026-09-26 |
Features
- Price-effect decompositions draw their indifference curves by default: U0 through A, U1 through C, and the curve through B under Slutsky
Haagsma utility model with an always-inferior good that becomes Giffen at high enough income
Legend placed automatically where it covers the least of the diagram, or at a chosen corner or side
Label for every text element: axis labels, origin, titles, effect labels, Edgeworth box text
opacity on Stroke, Marker, Label, Legend, Effect, and Fill
Changes
- Existing decomposition figures now include their indifference curves;
show_curves=False restores the previous figure
- Effect range arrows point one way, from A to B and from B to C
Bug fixes
- Tighter optimisation tolerance, so comparative statics and Slutsky matrices are accurate
- Indifference curves at negative utility levels are drawn solid
|
v1.8.0 2026-09-26 |
Features
Effect sets the colour, range-arrow height, and label of each price-effect decomposition effect
Marker sets point colour, size, and shape across canvases, demand diagrams, and Edgeworth boxes
Label sets point-label text, position (four sides and four corners), offset, colour, size, and visibility; decomposition A/B/C labels can be hidden
Fill gives the budget-set shading its own colour and opacity
Axis sets one axis's label, label position, and stroke in a single object
- Theme defaults for markers, labels, and fills, such as
theme.eq_marker, theme.point_label, and theme.budget_fill
Changes
- Default equilibrium point size reduced from 6 to 4
Stroke is the preferred way to style lines; separate colour, width, and style arguments remain as shorthand
Bug fixes
- Wedge arrowheads keep a fixed on-screen size instead of stretching along the line
- Edgeworth equilibrium indifference curves apply
stroke_a / stroke_b
|
v1.7.0 2026-09-25 |
Features
- Independent axis-label positions, line styles, and arrowhead styles for
Canvas and Figure
- Per-figure text and math fonts without changing Matplotlib's global configuration
Stroke controls line width, style, colour, and arrowheads across canvases, figures, demand diagrams, and Edgeworth boxes
econ-viz --version prints the installed package version
Bug fixes
- Correct utility-model domains, asymmetric CES expansion paths, Cobb-Douglas limits, and satiation optima with unspent income
- Robust contour levels around zero and negative utility values
- Boundary-safe comparative statics near zero prices, income, and subsistence constraints
- All example scripts run from a clean checkout
Maintenance
- Package management and builds migrated to
uv
- CI tests Python 3.10–3.13, enforces branch coverage, and smoke-tests runnable examples
- Tagged releases publish only after tests pass
|
v1.6.0 2026-04-24 |
Features
- Colour-blind-friendly default palette, with reusable
themes.COLORBLIND_CYCLE_RGB and themes.COLORBLIND_CYCLE_HEX
- Default indifference-curve line width reduced from
2.0 to 1.8
Maintenance
- Animation example moved to
examples/scripts/animation.py
- Generated files under
examples/output/ are no longer tracked
Tests
- TikZ axis regression test no longer depends on colour indices
|
v1.5.0 2026-04-21 |
Features
- Pure TikZ export backend;
Canvas.save() and Figure.save() accept .tex
- Price-effect decomposition:
decompose_price_effect(), PriceEffectDecomposition, and Canvas.add_decomposition() for A/B/C bundles and substitution/income overlays
- Decomposition APIs importable from the package root
- New example scripts for decomposition, demand diagrams, PCC/ICC paths, multi-panel layouts, and TikZ export
Bug fixes
- Notebook install flow on Colab is restart-safe
Refactoring
- Better axis-label placement and visibility in shared-panel layouts
Tests
- Regression tests for TikZ export and price-effect decomposition
|
v1.4.0 2026-04-09 |
Features
Animator for GIF parameter sweeps via Pillow, no ffmpeg required
WidgetViewer for slider controls in Jupyter notebooks
- Optional extras
animation, interactive, and all
- Parameter, price, income, and budget-only GIF examples for common utility functions
- More reliable GIF export by compositing frames onto a solid background
- Notebook widgets accept typed values alongside sliders
Tests
- Tests for
Animator and WidgetViewer
|
v1.3.2 2026-04-03 |
Bug fixes
- Edgeworth contract curves and price lines default to dashed black
Maintenance
- Publish workflow skips versions already on PyPI
|
v1.3.1 2026-04-03 |
Features
- Edgeworth internals split into compute, state, and plotter modules
- Model registry (
models.registry), used by the CLI to build models
Refactoring
- CLI errors raise
CliConfigError, with exit handling centralized in cli.main
- Shared contour-level policies in
contours.level_policies
- One figure exporter (
io.exporter) shared by Canvas, Figure, and EdgeworthBox
- Canvas rendering split into
canvas.renderers and canvas.primitives
- Package-root exports load lazily, with the public API unchanged
|
v1.3.0 2026-04-03 |
Features
EdgeworthBox and EquilibriumFocusConfig for two-consumer exchange diagrams
- Contract curve, core, Walrasian equilibrium overlay, and equilibrium-focused indifference curves
examples/edgeworth_box.py covering common utility-function combinations
- Dedicated Edgeworth tests
|
v1.2.3 2026-03-31 |
Features
SlutskyMatrix checks symmetry, negative semidefiniteness, and homogeneity, and warns when a condition fails
- CLI supports
QuasiLinear, StoneGeary, and Translog
|
v1.2.2 2026-03-31 |
Bug fixes
- PCC/ICC paths are smoothed by default, with slightly extended endpoints and markers hidden unless requested
- PCC/ICC paths use their own colours, and demand diagrams have more goods-space padding
- Dedicated PCC/ICC example generator and tests
|
v1.2.0 2026-03-30 |
Features
- Multi-panel
Figure layouts and the Layout enum
- Linked
DemandDiagram for Marshallian demand
PricePath, IncomePath, and Canvas.add_path() for PCC/ICC plots
|
v1.1.0 2026-03-30 |
Features
comparative_statics helper
HomogeneityAnalyzer and ReturnsToScale in the analysis module
Translog model, plus legend and indifference-curve labels
|
v1.0.2 2026-03-29 |
Bug fixes
- Math axis labels are no longer double-wrapped
- NumPy upper bound removed to avoid conflicts on Colab
|
v1.0.1 2026-03-29 |
Bug fixes
- Pin
numpy<2 to avoid ABI mismatches on Colab and local installs
Maintenance
- Relaxed Python and NumPy bounds;
pytest pinned to 8.x
|
v1.0.0 2026-03-28 |
|