Skip to content

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

Added

  • Introduced the axis concept as a way to represent aligned shapes across parameters, systems, etc. Added two kinds of axes, categorical and continuous, to represent different kinds of dimensions. Also added an axes top level key to the ConfigurationModel so users can provide these axes via configuration and flepimop2.axis module for realizing & manipulating axes from configuration. See #147.
  • Added ways to specify shape for parameters based on axes by changing ParameterABC.sample to return a ParameterValue that contains both the underlying value as a numpy array as well as shape metadata, and is easily extensible to other metadata and underlying value types in the future. Also added ModelStateSpecification, ParameterRequest types for systems to advertise their underlying state and request parameters to comply with said state specification. See #115, #133.
  • Added help text for CLI arguments that are formatted similarly to click's default formatting for options.
  • Added optional shorthand module configuration support across all module namespaces, allowing config values such as fixed(0.3) for modules that implement from_shorthand. See #14.
  • Added ConfigurationModel/ModuleBase.patch method to merge configurations together along with corresponding flepimop2 patch CLI for users to utilizing patching via the command line as well as YAML formatting. See #51, #52, #289.

Changed

  • Updated CLI commands to return consistent exit codes based on the kind of failure. See #17.
  • Added a default search order for CLI commands with the CONFIG argument making providing a file manually not required for typical/small project usage. See #245.
  • Removed implicit default module selection from module builders. Backend, engine, parameter, process, scenario, and system configs must now declare their module explicitly or use shorthand syntax.
  • Simplified ScenarioABC to use module_namespace="scenario" so scenario modules can use the same module-name shortcut mechanism as the other ABCs. Follow up to #216.
  • Updated documentation guides to provide .zip bundles of their files overlaid on the project skeleton template making demos easier to run. See #246.

Deprecated

  • ...

Removed

  • The non-pydantic approach to defining custom modules. See #257.

Fixed

  • Restored parameter: value syntax (i.e. pi: 3.14) for specifying scalar parameters directly as floats/ints in the configuration file. See #100.
  • Fixed bug where flepimop2 --version would show 0.1.0, now corrected to show the version from flepimop2 installed. See #266.
  • Loosened ParameterValue.value to any Array-API-compliant array (numpy.ndarray, jax.Array, etc.) by retyping the field via a new flepimop2.typing.Array Protocol and removing the unconditional np.asarray(..., dtype=np.float64) cast in __post_init__. Producers are responsible for handing in the correct dtype, which mypy already enforces; consumers that require NumPy now coerce explicitly at the engine boundary. Non-numeric Array-API dtypes (e.g. NumPy string/object arrays) are rejected at ParameterValue construction via __array_namespace__().isdtype(..., "numeric") (with a dtype.kind fallback), addressing review feedback on the breadth of the Array protocol. This unblocks engine-level jax.vmap / jit / inference workflows. See #270.

Security

  • ...

[0.2.0] - 2026-04-28

Added

  • Added repository citation metadata via CITATION.cff and generated documentation for citing flepimop2. See #136.
  • Added a dedicated installation guide that documents pip install flepimop2, uv add flepimop2, and how to declare flepimop2 as a dependency in another project. See #89, #144.
  • Added a new vaccination campaign scenario-grid guide with linked reproducible assets (SIRHD_vax_scenario_grid.yml, three postprocessing scripts, and corresponding rendered figures) under docs/examples/vaccination-campaign-scenario-grid/. See #198.
  • Updated documentation quick start and getting-started guides with new assets to align with the guides and highlight the capabilities of flepimop2 to new users.
  • Improved the vaccination campaign scenario grid example documentation for clarity and step-by-step guidance; updated the example config for accuracy. (docs/feature-vaccination-campaign-scenario-grid)

Changed

  • Added flepimop2-op-system, flepimop2-op-engine, matplotlib, pandas to the default environment.yaml generated by flepimop2 skeleton CLI as well as pinned the python version to 3.13.

[0.1.0] - 2026-04-20

Added

  • Initialized flepimop2.
  • Added documentation using mkdocs that includes API/CLI reference as well as reusing CHANGELOG.md and CONTRIBUTING.md where appropriate.
  • Added basic configuration models to parse and serialize configuration files. These are contained in the flepimop2.configuration module.
  • Added core simulation infrastructure including engines (machinery to evolve a model) and systems (descriptions of model changes). These are contained in the flepimop2.engine/system/backend modules.
  • Added the ability to execute auxiliary commands in the context of flepimop2 with the flepimop2 process CLI backed by the flepimop.process module.
  • Converted flepimop2 to a PEP420 implicit namespace package so external providers can inject themselves into the flepimop2 namespace. This allows users to reference modules by name only and then flepimop2 will resolve the kind of module based on its location in a configuration file. See #45.
  • Added flepimop2.abcs as a convenient re-export of ABCs/protocols for developer use. See #85.
  • Made parameters modular, similar to backends/engines/processes/systems, to allow external packages to provide their own parameter types. See #75.
  • Restricted the name of user defined backends/engines/parameters/processes/systems to comply with the custom IdentifierString type.
  • Added a new flepimop2 skeleton CLI command for scaffolding a project repository. See #84.
  • Added flepimop.testing with functionality for integration testing, both for flepimop2 itself and for external provider packages. See #107.
  • Added a parent class, ModuleABC, for all customizable modules that sets a required module attribute and provides infrastructure for non-standardized properties information. Also extended said infrastructure to allow for standardized property information for SystemABC. See #113, #126, #129.
  • Add "binding" to SystemABC objects to convert fully generic signature to a simulation needs-specific signature.
  • Refactor SystemABC type approach to binding (and fix knock on mypy typing issues, circular dependency issues). Briefly, a SystemABC implementation now only needs to provide _bind_impl which fixes (or not) parameters in the system. This update adds another internal implementation (AdapterSystem) for directly creating a system from locally defd function (vs WrapperSystem which reads from a file).
  • Added infrastructure for submitting package to PyPI. See #123, #142, #195, #196.
  • Modules can now declare their name via the module keyword argument to class declaration to simplify naming for developers. See #88.
  • Introduce ScenarioABC type to capture parameter scenarios.

Changed

  • The simulate command now resolves initial conditions from the system's initial_state option (a symbolic state→parameter mapping) when available, falling back to the legacy s0/i0/r0 convention. See #225.
  • Updated the documentation quick start integration test to use the same configuration file as the documentation homepage to ensure the two stay in sync. See #185.