Skip to content

Changelog

Release history of econ-viz. Documentation-only changes are not listed.

VersionChanges
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
  • Initial release

Comments