• Restructured documentation, now has a function reference template.
  • State and Transfer conversion with static cols/rows bugs fixed.
  • minimal_realization and staircase bugs fixed
  • random model creation in continuous and discrete time is possible.
  • pole placement via ackermann


  • First public release
  • Time domain plots and auto time sequence generation.
  • Unit tests are significantly improved(>80%)
  • Lots and lots of bug fixes.
  • Change the documentation theme to guzzle
  • Added first order hold discretization method
  • Removed FAQ from docs


  • Unified State, Transfer checks via arg_utils
  • Fixed transfer_to_state argument signature
  • Added discretization and undiscretization funcs
  • Separated the frequency domain computations and plotting
  • Rewritten the frequency grid generation
  • Fixed some of the unwrapping bugs
  • Added lqr, dlqr, lqry and dlqry with a single signature
  • Refactored minimal_realization related funcs.
  • Fixed hinf-norm bugs
  • Started time domain plots.


  • Requirement of NumPy is changed to 1.13 and above. Among others, we need __array_ufunc__ override mechanism for representation algebra. This should not be an issue since noone seems to use this.
  • The representations can now be sliced with G[:,1:3] etc.


  • Sanitized the circular dependencies a bit more
  • minimal_realization is changed to accept models instead of A,B,C triplet
  • minimal_realization for Transfer uses the pole zero cancellation check
  • more housekeeping and bug fixes
  • added damping, natural frequency properties of poles
  • state_to_transfer does not return minimal realizations (per request)


  • More tests
  • bode, nyquist plots with matplotlib
  • Rewritten the transmission_zeros to improve accuracy
  • Removed the single file and replaced it with modular files.
  • Refactored Riccati solvers to SciPy official repo
  • Lyapunov solver safety net is moot. Created PR #6775 in SciPy


  • Added Riccati solvers
  • More documentation
  • Added safety net for lyapunov solvers in case there is no solution


  • Added Lyapunov solvers
  • Fixed many bugs
  • Removed block diag and switched to scipy version


  • Initial versioning and packaging.
  • Adding documentation and Sphinx integration.
  • Basically everything there is.