Development Roadmap
This is a preliminary roadmap for PathSim’s development. To be fair, its more a collection of ideas and potential directions then a real roadmap. The items are ordered by category. If you want to contribute (check out the Contributing guidelines), you can take on one or more of them!
Blocks
adding more convenience blocks, for example math operations or different kinds of sources
refactor the block library for clarity, currently for example, different sources are separated throughout the submodules
Solvers
multistep methods (
BDF,GEAR) need startup methods to build history, to maintain consistency order globallymake solver term \(\dot{x}\) accessible for solving index 1 DAEs, especially for stiffly accurate
DIRKandESDIRKmethods, will be the basis for future DAE blocksadd interpolant within timestep to solvers for dense output and to improve interpolation for the event mechanism
Events
separate checks for event types in simulation loop, purely time dependent events (
Schedule) can be estimated before the timestep is taken and therefore be approached without backtracking, which would improve performance (maybe add some method Event.estimate(t))
Analysis
periodic steady state solver, probably shooting method with automatic frequency/period detection
small signal frequency domain analysis based on linearized system
Performance
fork-join block-level parallelization with Python 3.13 free-threading
more robust and adaptable steady state solver, perhaps through damping, or using EUB with convergence driven timestep control
exponential integrators for LTI blocks (
StateSpace,TransferFunction) and for linearized dynamic blocksmore robust resolution of algebraic loops (currently implicitly handled through fixed point loop in
Simulation._update()), probably: loop detection, accelerator injectionjit compilation of internal functions in the operators (
Operator,DynamicOperator)
Documentation
testing of code blocks in the Examples section through either jupyter-book integration, or doctest
add the standalone examples from the repo to the Examples section in the docs with additional explanations as for the other examples
the integrators (
Solverchild classes) would benefit from more descriptive docstrings for the api reference including explanations and references (literature) to the specific method used and also some usage suggestions to make solver choice easier and more transparent for the user- add more tutorials to the docs, that focus on:
type hints for everything
API
separate the different kinds of analyses more clearly, transient and steady state analysis results should be separated for
ScopeandSpectrumblocks to feel more naturaladd options to integrators (
ImplicitSolver) to specify the type of optimizer to be used to solve the implicit update equation, currenly the hybrid NewtonAnderson is used, but more flexibility might be nice in the future
User Interface & Visualization
visualization of the connection graph from PathSim models for debugging as an intermediate solution, before a fully fledged GUI is available, maybe using graphviz
improved and faster interactive plotting, moving to from matplotlib to plotly?
block diagram editor user interface as an extension to PathSim, perhaps using React Flow
Cross Compatibility
support for FMI / FMU (model exchange), import and export of PathSim models and blocks
support for electrical circuits, SPICE netlists
support for s-parameters (touchstone files) by vectorfitting and wrapping
StateSpaceblock
Testing
complete testing for blocks in
pathsim/blocks/rfandpathsim/blocks/mixed(currently testing for these blocks is mostly top down)test automatic differentiation through Value with every block and with linearization
permutation testing for all kinds of system topologies, blocks and solvers