Releases: milanofthe/pathsim
v0.7.1
What's Changed
- Algebraic Loop Accelerator by @milanofthe in #50
- ODE Solver Overhaul by @milanofthe in #52
- Adding ScheduleList event type by @milanofthe in #54
Full Changelog: v0.7.0...v0.7.1
v0.7.0
Refactor
This release comes with performance improvements for scheduled events and a refactor of the block library.
This changes the import hierarchy of the blocks and eliminates the rf
and mixed
submodules. The goal was to have a coherent block library that shows intention for block usage and remove ambiguity about what block to use from what module for what purpose.
Performance improvements for the Schedule
events is realized by a new estimate
method that truncates the timestep when in danger of overshooting the event time of scheduled events. This is very noticable (expect about 10-30% when scheduled events are present in the simulation), as it leads to a big reduction in discarded simulation steps.
What's Changed
- event estimation by @milanofthe in #47
- refactor block library by @milanofthe in #48
Full Changelog: v0.6.10...v0.7.0
v0.6.10
Port definitions with tuples
Enable port definitions to accept lists / tuples of int
:
C = Connection(B1[0, 1], B2[1, 2])
where previously you could do slicing
C = Connection(B1[0:2], B2[1:3])
or had to define multiple connections.
But now you can define the connections arbitrarily, for example like this:
C = Connection(B1[3, 5, 8, 2], B2[4, 3, 2, 5])
Performance
The intention was to remove unnecessary function calls during data transfer between blocks for performance (brings 5 to 10% performance gains, which is always nice) and to make things more concise. Specifically this means removing the Block.get
and Block.set
methods and instead directly using the inputs
and outputs
registers for data transfer. For the Subsystem
, this is realized by using @property
to access the inputs
and outputs
of the internal Interface
block, which also makes this block definition much more concise.
What's Changed
- examples and tests by @milanofthe in #41
- added bouncing ball as testcase to tests/evals by @milanofthe in #42
- example and testcase for purely algebraic signal chain by @milanofthe in #43
- Refactor Connection and Port management by @milanofthe in #46
Full Changelog: v0.6.9...v0.6.10
v0.6.9
Performance again
This is a big one. Fully reworking how system function evaluation works using directed graphs brings BIG performance gains. Expect from 20% up to 300% gains for systems with long algenraic paths. For details go here.
What's Changed
- DAG and broken loop DAGs for fast system evaluation by @milanofthe in #26
- better docs by @milanofthe in #30
- refactor tests, clear testing philosophy by @milanofthe in #31
- Wrapper class for wrapping external code and making discrete blocks by @Pimss in #24
- Bugfix to example_pid_vs_discretePID.py by @Pimss in #35
- Reworked LTI blocks to use Scipy methods by @milanofthe in #36
- updated docs by @milanofthe in #37
- added docs example testing as item to the roadmap by @milanofthe in #38
Full Changelog: v0.6.8...v0.6.9
v0.6.8
Performance
- Improved simulation performance by cutting unnecessary branching from the main simulaiton loop. This was achieved by assembling lists of active system components (blocks, connections, events) dynamically before the timestep and then using only those for iterations within the timestep. In most cases, this improves performance by about 10%.
- Refactor of the timestepping methods in ´Simulation´ to be more readable and better separate implicit/explicit and fixed/adaptive solvers.
What's Changed
- simulation loop by @milanofthe in #22
- added and improved tests for Simulation by @milanofthe in #23
Full Changelog: v0.6.7...v0.6.8
v0.6.7
What's Changed
- Examples by @milanofthe in #16
- better docstrings by @milanofthe in #17
- Ports by @milanofthe in #18
- better documentation by @milanofthe in #19
- Roadmap by @milanofthe in #20
Full Changelog: v0.6.6...v0.6.7
v0.6.6
What's Changed
- Pulse source with scheduled events by @milanofthe in #11
- better validations by @milanofthe in #12
- Improved progresstracking by @milanofthe in #13
- defaults and constants by @milanofthe in #14
- Connection Port Slicing by @milanofthe in #15
Full Changelog: v0.6.5...v0.6.6
v0.6.5
another minor releas with some fixes and some handy new features
Packaging thanks to @RemDelaporteMathurin
- moving all the source code to a src directory
- replace outdated setup.py and requirements.txt files by a pyproject.toml file
- remove the _version.py file (which btw should not be under version control) and have it dynamically written by setuptools
Fixes
- fixed
__len__
method of mixed signal blocks, most of them have no algebraic passthrough
Blocks
- added special
AntiWindupPID
block inpathsim/blocks/ctrl.py
which is a PID controller with a mechanism for anti-windup using backcalculation that inherits from the standardPID
block
Plotting
- added
.plot2D()
method to theScope
block as a quality of life method for fast phase portrait visualizaiton - added
.plot3D()
method to theScope
block as a quality of life method for fast visualizations three dimensional solution trajectories
Solvers
- added a 2nd order Runge-Kutta-Fehlberg adaprive solver
RKF21
as a very cheap explicit adaptive option
Docs
- improved docstrings of all solvers to give users more background on how to choose an appropriate solver for their problem
Testing
- added mixed signal examples under
tests/models/_models
as model files to testing for CI
v0.6.4
minor release with some new blocks and some fixes
New Blocks
- new
PID
block inpathsim/blocks/ctrl.py
to simplify control system simulations - ideal
DAC
andADC
blocks inpathsim/blocks/mixed/converters.py
to simplify mixed signal simulations, driven by scheduled events - finite impulse response
FIR
block for digital filters inpathsim/blocks/mixed/fir.py
, driven by scheduled events
Fixes
- fixed
AllpassFilter
block inpathsim/blocks/rf/filters.py
, now implements a 1st order allpass or a cascade of n 1st order allpass filters
Plotting
- the
Scope
block now has aplot2D
method to directly visualize phase diagrams (quality of life)
v0.6.3
Simulation
- updated default args for
Simulation.run()
so it doesnt reset the simulation by default anymore
Blocks
- updated
blocks.rf.sources.ChirpSource
with optional internal phase noise (white, cumulative) contributions, basically the same as in theblocks.rf.noise.PhaseNoise
block
Uncertainty Quantification
- updated the
Value
class to hold a standard deviationsig
next to the numerical value - added classmethod
var
to theValue
class to automatically compute the variance of a parameter from the sensitivities using a first order taylor approximation