All notable changes will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning with pre-1.0 development conventions. In particular, the API is still evolving and may change between minor versions, although we'll aim to document such changes here.
- Initial unofficial "public" release
- Core functionality:
- NumPy-compatible symbolic arrays
- Function compilation with
@arc.compile - Automatic differentiation (
grad,jac,hess) - ODE solvers and integration
- Optimization and root-finding capabilities
- PyTree data structures
- C code generation
- Examples for:
- Basic usage and function compilation
- ODE integration (Lotka-Volterra, pendulum)
- Optimization (Rosenbrock problem)
- Root-finding and implicit functions
- Documentation:
- Installation guide
- Getting started tutorials
- API reference
- Conceptual framework explanation
- "Under the hood" technical details
- Common pitfalls and gotchas
- Extended tutorials for "multirotor dynamics" and "deploying to hardware"
New version tag for release to PyPI (previous "Archimedes" project tagged with v0.1.0).
- Added support for autogenerating C structs from tree data types (PR #78)
- Added experimental
Rotationclass (PR #83) - Added
StructConfigandUnionConfigfor managing configuration of complex struct hierarchies (PR #84) - Refactored
FlightVehicletoRigidBody(PR #86) - Added new tutorial series on end-to-end controls development workflow w/ HIL proof-of-concept (PR #88)
- Added experimental
IIRFilterclass (PR #88) - Moved images, data, notebooks, etc. to LFS (PR #88)
- Migrated "PyTree" to "struct" terminology (Issue #89)
- Renamed
@pytree_nodedecorator to@struct(Issue #89)
- Added MyPy to CI checks
- Fixed all type checking errors
- Use
Rotationfor attitude inRigidBody - Revised "Hierarchical Modeling" tutorial
- Add blog to website
- Convert all notebooks to MyST
- Bugfix for
Rotation.as_eulerfor rotations with odd permutations - Move
RigidBodyand related functionality tospatialmodule - Move
spatialmodule out ofexperimental(+codecov, documentation)
- Bump pip to 25.3 to resolve vulnerability (Issue #103)
- Overhaul
spatialmodule:Attitudeprotocol, low-level functions, wrapper classes,RigidBodysingleton (Issue #114) - Bugfix for struct type name resolution with inner classes (Issue #115)
- Performance improvements to
@compilecalls from Python runtime - Add
bufferedmode to@compile - Support addition and scalar multiplication for
Quaternion - Bugfix for non-commutative broadcasting (PR #122 and #123)
- Bump urllib3 to 2.6.0 to resolve vulnerabilities (Issue #126)
- Raise error instead of silently incorrect result on
__bool__evaluation (Issue #128) - Fix transpose error for nonsquare matrices in buffered compile (Issue #130)
- Add support for
np.block - Add logic for creating additional struct types in codegen if they have differently-sized children (Issue #135)
- Add acronym handling to snake case conversion in codegen (
IIRFilter->iir_filter_t, noti_i_r_filter_t) - (Issue #136) - Bump filelock to 3.20.1 to resolve vulnerabilities (Issue #138)
- Bump control requirement to 0.10.2 (required for Lynx diagram export compatibility)
- Bump pip version in uv.lock to 26.0 to resolve vulnerability GHSA-6vgw-5pg2-w6jp
- Bump nbconvert to 7.17.0 to resolve vulnerability GHSA-xm59-rqc7-hhvf
- Enable finite differencing for
callbackfunctions - Fix bug in
switchwhere args were passed directly duringFunctioncreation - Implement DFS for sorting struct order in codegen (fixes struct definition bug)
- Remove Python 3.10+ features to allow for force-installing into legacy environments (3.9 + NumPy 1.20, in particular)