pathsim 0.25.1__tar.gz → 0.27.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (489) hide show
  1. {pathsim-0.25.1 → pathsim-0.27.0}/PKG-INFO +2 -2
  2. {pathsim-0.25.1 → pathsim-0.27.0}/pyproject.toml +1 -1
  3. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/_version.py +3 -3
  4. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/dae.py +153 -23
  5. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/utils/graph.py +15 -11
  6. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim.egg-info/PKG-INFO +2 -2
  7. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim.egg-info/SOURCES.txt +0 -97
  8. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim.egg-info/scm_file_list.json +0 -97
  9. pathsim-0.27.0/src/pathsim.egg-info/scm_version.json +8 -0
  10. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_dae.py +135 -6
  11. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/test_simulation.py +72 -0
  12. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/utils/test_graph.py +67 -0
  13. pathsim-0.25.1/docs/.readthedocs.yaml +0 -25
  14. pathsim-0.25.1/docs/Makefile +0 -20
  15. pathsim-0.25.1/docs/requirements.txt +0 -16
  16. pathsim-0.25.1/docs/source/_ext/github_issues.py +0 -107
  17. pathsim-0.25.1/docs/source/_static/custom.css +0 -200
  18. pathsim-0.25.1/docs/source/_static/redirect.js +0 -8
  19. pathsim-0.25.1/docs/source/api.rst +0 -137
  20. pathsim-0.25.1/docs/source/conf.py +0 -156
  21. pathsim-0.25.1/docs/source/contributing.rst +0 -25
  22. pathsim-0.25.1/docs/source/examples.rst +0 -336
  23. pathsim-0.25.1/docs/source/figures/pathsim_object_hierarchy_g.png +0 -0
  24. pathsim-0.25.1/docs/source/figures/pathsim_solver_hierarchy_g.png +0 -0
  25. pathsim-0.25.1/docs/source/figures/sin_cos_blockdiagram_g.png +0 -0
  26. pathsim-0.25.1/docs/source/figures/system_g.png +0 -0
  27. pathsim-0.25.1/docs/source/index.rst +0 -180
  28. pathsim-0.25.1/docs/source/modules/pathsim.blocks._block.rst +0 -7
  29. pathsim-0.25.1/docs/source/modules/pathsim.blocks.adder.rst +0 -7
  30. pathsim-0.25.1/docs/source/modules/pathsim.blocks.amplifier.rst +0 -7
  31. pathsim-0.25.1/docs/source/modules/pathsim.blocks.comparator.rst +0 -7
  32. pathsim-0.25.1/docs/source/modules/pathsim.blocks.converters.rst +0 -7
  33. pathsim-0.25.1/docs/source/modules/pathsim.blocks.counter.rst +0 -7
  34. pathsim-0.25.1/docs/source/modules/pathsim.blocks.ctrl.rst +0 -7
  35. pathsim-0.25.1/docs/source/modules/pathsim.blocks.delay.rst +0 -7
  36. pathsim-0.25.1/docs/source/modules/pathsim.blocks.differentiator.rst +0 -7
  37. pathsim-0.25.1/docs/source/modules/pathsim.blocks.discrete.rst +0 -7
  38. pathsim-0.25.1/docs/source/modules/pathsim.blocks.dynsys.rst +0 -7
  39. pathsim-0.25.1/docs/source/modules/pathsim.blocks.filters.rst +0 -7
  40. pathsim-0.25.1/docs/source/modules/pathsim.blocks.fmu.rst +0 -7
  41. pathsim-0.25.1/docs/source/modules/pathsim.blocks.function.rst +0 -7
  42. pathsim-0.25.1/docs/source/modules/pathsim.blocks.integrator.rst +0 -7
  43. pathsim-0.25.1/docs/source/modules/pathsim.blocks.kalman.rst +0 -7
  44. pathsim-0.25.1/docs/source/modules/pathsim.blocks.lti.rst +0 -7
  45. pathsim-0.25.1/docs/source/modules/pathsim.blocks.math.rst +0 -7
  46. pathsim-0.25.1/docs/source/modules/pathsim.blocks.multiplier.rst +0 -7
  47. pathsim-0.25.1/docs/source/modules/pathsim.blocks.noise.rst +0 -7
  48. pathsim-0.25.1/docs/source/modules/pathsim.blocks.ode.rst +0 -7
  49. pathsim-0.25.1/docs/source/modules/pathsim.blocks.relay.rst +0 -7
  50. pathsim-0.25.1/docs/source/modules/pathsim.blocks.rf.rst +0 -7
  51. pathsim-0.25.1/docs/source/modules/pathsim.blocks.rng.rst +0 -7
  52. pathsim-0.25.1/docs/source/modules/pathsim.blocks.rst +0 -309
  53. pathsim-0.25.1/docs/source/modules/pathsim.blocks.scope.rst +0 -7
  54. pathsim-0.25.1/docs/source/modules/pathsim.blocks.sources.rst +0 -7
  55. pathsim-0.25.1/docs/source/modules/pathsim.blocks.spectrum.rst +0 -7
  56. pathsim-0.25.1/docs/source/modules/pathsim.blocks.switch.rst +0 -7
  57. pathsim-0.25.1/docs/source/modules/pathsim.blocks.table.rst +0 -7
  58. pathsim-0.25.1/docs/source/modules/pathsim.blocks.wrapper.rst +0 -7
  59. pathsim-0.25.1/docs/source/modules/pathsim.connection.rst +0 -7
  60. pathsim-0.25.1/docs/source/modules/pathsim.events._event.rst +0 -7
  61. pathsim-0.25.1/docs/source/modules/pathsim.events.condition.rst +0 -7
  62. pathsim-0.25.1/docs/source/modules/pathsim.events.rst +0 -55
  63. pathsim-0.25.1/docs/source/modules/pathsim.events.schedule.rst +0 -7
  64. pathsim-0.25.1/docs/source/modules/pathsim.events.zerocrossing.rst +0 -7
  65. pathsim-0.25.1/docs/source/modules/pathsim.optim.anderson.rst +0 -7
  66. pathsim-0.25.1/docs/source/modules/pathsim.optim.booster.rst +0 -7
  67. pathsim-0.25.1/docs/source/modules/pathsim.optim.numerical.rst +0 -7
  68. pathsim-0.25.1/docs/source/modules/pathsim.optim.operator.rst +0 -7
  69. pathsim-0.25.1/docs/source/modules/pathsim.optim.rst +0 -44
  70. pathsim-0.25.1/docs/source/modules/pathsim.simulation.rst +0 -7
  71. pathsim-0.25.1/docs/source/modules/pathsim.solvers._rungekutta.rst +0 -7
  72. pathsim-0.25.1/docs/source/modules/pathsim.solvers._solver.rst +0 -7
  73. pathsim-0.25.1/docs/source/modules/pathsim.solvers.bdf.rst +0 -7
  74. pathsim-0.25.1/docs/source/modules/pathsim.solvers.dirk2.rst +0 -7
  75. pathsim-0.25.1/docs/source/modules/pathsim.solvers.dirk3.rst +0 -7
  76. pathsim-0.25.1/docs/source/modules/pathsim.solvers.esdirk32.rst +0 -7
  77. pathsim-0.25.1/docs/source/modules/pathsim.solvers.esdirk4.rst +0 -7
  78. pathsim-0.25.1/docs/source/modules/pathsim.solvers.esdirk43.rst +0 -7
  79. pathsim-0.25.1/docs/source/modules/pathsim.solvers.esdirk54.rst +0 -7
  80. pathsim-0.25.1/docs/source/modules/pathsim.solvers.esdirk85.rst +0 -7
  81. pathsim-0.25.1/docs/source/modules/pathsim.solvers.euler.rst +0 -7
  82. pathsim-0.25.1/docs/source/modules/pathsim.solvers.gear.rst +0 -7
  83. pathsim-0.25.1/docs/source/modules/pathsim.solvers.rk4.rst +0 -7
  84. pathsim-0.25.1/docs/source/modules/pathsim.solvers.rkbs32.rst +0 -7
  85. pathsim-0.25.1/docs/source/modules/pathsim.solvers.rkck54.rst +0 -7
  86. pathsim-0.25.1/docs/source/modules/pathsim.solvers.rkdp54.rst +0 -7
  87. pathsim-0.25.1/docs/source/modules/pathsim.solvers.rkdp87.rst +0 -7
  88. pathsim-0.25.1/docs/source/modules/pathsim.solvers.rkf21.rst +0 -7
  89. pathsim-0.25.1/docs/source/modules/pathsim.solvers.rkf45.rst +0 -7
  90. pathsim-0.25.1/docs/source/modules/pathsim.solvers.rkf78.rst +0 -7
  91. pathsim-0.25.1/docs/source/modules/pathsim.solvers.rkv65.rst +0 -7
  92. pathsim-0.25.1/docs/source/modules/pathsim.solvers.rst +0 -232
  93. pathsim-0.25.1/docs/source/modules/pathsim.solvers.ssprk22.rst +0 -7
  94. pathsim-0.25.1/docs/source/modules/pathsim.solvers.ssprk33.rst +0 -7
  95. pathsim-0.25.1/docs/source/modules/pathsim.solvers.ssprk34.rst +0 -7
  96. pathsim-0.25.1/docs/source/modules/pathsim.solvers.steadystate.rst +0 -7
  97. pathsim-0.25.1/docs/source/modules/pathsim.subsystem.rst +0 -7
  98. pathsim-0.25.1/docs/source/modules/pathsim.utils.adaptivebuffer.rst +0 -7
  99. pathsim-0.25.1/docs/source/modules/pathsim.utils.analysis.rst +0 -7
  100. pathsim-0.25.1/docs/source/modules/pathsim.utils.gilbert.rst +0 -7
  101. pathsim-0.25.1/docs/source/modules/pathsim.utils.logger.rst +0 -7
  102. pathsim-0.25.1/docs/source/modules/pathsim.utils.portreference.rst +0 -9
  103. pathsim-0.25.1/docs/source/modules/pathsim.utils.progresstracker.rst +0 -7
  104. pathsim-0.25.1/docs/source/modules/pathsim.utils.realtimeplotter.rst +0 -7
  105. pathsim-0.25.1/docs/source/modules/pathsim.utils.register.rst +0 -7
  106. pathsim-0.25.1/docs/source/modules/pathsim.utils.rst +0 -73
  107. pathsim-0.25.1/docs/source/quickstart.ipynb +0 -168
  108. pathsim-0.25.1/docs/source/roadmap.rst +0 -10
  109. pathsim-0.25.1/docs/source/roadmap_generated.rst +0 -228
  110. pathsim-0.25.1/src/pathsim.egg-info/scm_version.json +0 -8
  111. {pathsim-0.25.1 → pathsim-0.27.0}/.codecov.yml +0 -0
  112. {pathsim-0.25.1 → pathsim-0.27.0}/.github/FUNDING.yml +0 -0
  113. {pathsim-0.25.1 → pathsim-0.27.0}/.github/pull_request_template.md +0 -0
  114. {pathsim-0.25.1 → pathsim-0.27.0}/.github/workflows/pypi_deployment.yml +0 -0
  115. {pathsim-0.25.1 → pathsim-0.27.0}/.github/workflows/tests_codecov.yml +0 -0
  116. {pathsim-0.25.1 → pathsim-0.27.0}/.github/workflows/urlchecker.yml +0 -0
  117. {pathsim-0.25.1 → pathsim-0.27.0}/.gitignore +0 -0
  118. {pathsim-0.25.1 → pathsim-0.27.0}/CITATION.cff +0 -0
  119. {pathsim-0.25.1 → pathsim-0.27.0}/CONTRIBUTING.md +0 -0
  120. {pathsim-0.25.1 → pathsim-0.27.0}/LICENSE.txt +0 -0
  121. {pathsim-0.25.1 → pathsim-0.27.0}/README.md +0 -0
  122. {pathsim-0.25.1 → pathsim-0.27.0}/conftest.py +0 -0
  123. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/abs_braking.ipynb +0 -0
  124. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/algebraic_loop.ipynb +0 -0
  125. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/billards.ipynb +0 -0
  126. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/bouncing_ball.ipynb +0 -0
  127. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/bouncing_pendulum.ipynb +0 -0
  128. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/cascade_controller.ipynb +0 -0
  129. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/checkpoints.ipynb +0 -0
  130. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/chemical_reactor.ipynb +0 -0
  131. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/coupled_oscillators.ipynb +0 -0
  132. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/data/BouncingBall_ME.fmu +0 -0
  133. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/data/CoupledClutches_CS_linux64.fmu +0 -0
  134. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/data/CoupledClutches_CS_win64.fmu +0 -0
  135. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/data/Dahlquist.fmu +0 -0
  136. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/data/VanDerPol_ME.fmu +0 -0
  137. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/dcmotor_control.ipynb +0 -0
  138. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/delta_sigma_adc.ipynb +0 -0
  139. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/diode_circuit.ipynb +0 -0
  140. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/elastic_pendulum.ipynb +0 -0
  141. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/algebraicloop_blockdiagram_g.png +0 -0
  142. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/billard_circle_g.png +0 -0
  143. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/bouncing_ball_blockdiagram_g.png +0 -0
  144. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/bouncing_ball_both_g.png +0 -0
  145. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/bouncing_ball_g.png +0 -0
  146. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/bouncing_ball_result_events_g.png +0 -0
  147. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/bouncing_ball_result_g.png +0 -0
  148. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/bouncing_ball_result_timesteps_g.png +0 -0
  149. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/bouncing_pendulum_blockdiagram_g.png +0 -0
  150. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/cascade_blockdiagram_g.png +0 -0
  151. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/coupled_oscillators_blockdiagram_g.png +0 -0
  152. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/coupled_oscillators_g.png +0 -0
  153. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/delta_sigma_blockdiagram_g.png +0 -0
  154. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/diode_blockdiagram_g.png +0 -0
  155. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/elastic_pendulum_g.png +0 -0
  156. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/fmcw_blockdiagram_g.png +0 -0
  157. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/fmcw_g.png +0 -0
  158. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/harmonic_oscillator_g.png +0 -0
  159. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/harmonic_oscillator_result_g.png +0 -0
  160. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/kalman_filter_blockdiagram_g.png +0 -0
  161. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/linear_feedback_blockdiagram_g.png +0 -0
  162. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/linear_feedback_result_g.png +0 -0
  163. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/linear_feedback_result_sensitivity_g.png +0 -0
  164. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/miller_frequency_divider_blockdiagram_g.png +0 -0
  165. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/nonlinear_noisy_amplifier_blockdiagram_g.png +0 -0
  166. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/ode_blockdiagram_g.png +0 -0
  167. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/pendulum_blockdiagram_g.png +0 -0
  168. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/pid_blockdiagram_g.png +0 -0
  169. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/sar_adc_blockdiagram_g.png +0 -0
  170. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/stick_slip_blockdiagram_g.png +0 -0
  171. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/stick_slip_blockdiagram_slip_g.png +0 -0
  172. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/stick_slip_blockdiagram_stick_g.png +0 -0
  173. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/stick_slip_g.png +0 -0
  174. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/thermostat_blockdiagram_g.png +0 -0
  175. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/vanderpol_blockdiagram_g.png +0 -0
  176. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/vanderpol_result_g.png +0 -0
  177. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/vanderpol_subsystem_blockdiagram_g.png +0 -0
  178. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/vanderpol_subsystem_lvl1_g.png +0 -0
  179. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/vanderpol_subsystem_lvl2_g.png +0 -0
  180. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/vanderpol_subsystem_lvl3_g.png +0 -0
  181. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/volterralotka_blockdiagram_g.png +0 -0
  182. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/ode_blockdiagram_2.png +0 -0
  183. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/stick_slip_blockdiagram_slip.png +0 -0
  184. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/figures/stick_slip_blockdiagram_stick.png +0 -0
  185. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/fmcw_radar.ipynb +0 -0
  186. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/fmu_cosimulation.ipynb +0 -0
  187. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/fmu_model_exchange_bouncing_ball.ipynb +0 -0
  188. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/fmu_model_exchange_vanderpol.ipynb +0 -0
  189. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/harmonic_oscillator.ipynb +0 -0
  190. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/kalman_filter.ipynb +0 -0
  191. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/linear_feedback.ipynb +0 -0
  192. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/lorenz_attractor.ipynb +0 -0
  193. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/nested_subsystems.ipynb +0 -0
  194. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/noisy_amplifier.ipynb +0 -0
  195. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/pendulum.ipynb +0 -0
  196. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/pid_controller.ipynb +0 -0
  197. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/poincare_maps.ipynb +0 -0
  198. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/rf_network_oneport.ipynb +0 -0
  199. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/sar_adc.ipynb +0 -0
  200. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/spectrum_analysis.ipynb +0 -0
  201. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/stick_slip.ipynb +0 -0
  202. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/switched_bouncing_ball.ipynb +0 -0
  203. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/thermostat.ipynb +0 -0
  204. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/transfer_function.ipynb +0 -0
  205. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/examples/vanderpol.ipynb +0 -0
  206. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/logos/pathsim_icon.png +0 -0
  207. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/logos/pathsim_logo.png +0 -0
  208. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/logos/pathsim_simplistic_logo.png +0 -0
  209. {pathsim-0.25.1 → pathsim-0.27.0}/docs/source/pathsim_docs.mplstyle +0 -0
  210. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_abs_braking.py +0 -0
  211. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_adc.py +0 -0
  212. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_algebraicchain.py +0 -0
  213. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_algebraicloop.py +0 -0
  214. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_cascade.py +0 -0
  215. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_dcmotor.py +0 -0
  216. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_deltasigma.py +0 -0
  217. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_derivative.py +0 -0
  218. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_diode.py +0 -0
  219. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_dualslope.py +0 -0
  220. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_elastic_pendulum.py +0 -0
  221. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_feedback.py +0 -0
  222. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_filters.py +0 -0
  223. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_harmonic_oscillator.py +0 -0
  224. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_kalman_filter.py +0 -0
  225. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_nested_subsystems.py +0 -0
  226. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_noise.py +0 -0
  227. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_pendulum.py +0 -0
  228. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_phasenoise.py +0 -0
  229. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_pid.py +0 -0
  230. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_pid_antiwindup.py +0 -0
  231. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_pid_vs_discretePID.py +0 -0
  232. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_radar.py +0 -0
  233. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_reactor.py +0 -0
  234. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_sar.py +0 -0
  235. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_solar.py +0 -0
  236. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_solver_hotswap.py +0 -0
  237. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_spectrum.py +0 -0
  238. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_spectrum_rf_oneport.py +0 -0
  239. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_steadystate.py +0 -0
  240. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_stickslip.py +0 -0
  241. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_transferfunction.py +0 -0
  242. {pathsim-0.25.1 → pathsim-0.27.0}/examples/example_vanderpol_subsystem.py +0 -0
  243. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_event/example_billards_sphere.py +0 -0
  244. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_event/example_bouncing_pendulum.py +0 -0
  245. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_event/example_bouncingball.py +0 -0
  246. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_event/example_bouncingball_friction.py +0 -0
  247. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_event/example_bouncingball_switched.py +0 -0
  248. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_event/example_integrator_reset.py +0 -0
  249. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_event/example_pulse.py +0 -0
  250. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_event/example_stickslip_event.py +0 -0
  251. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_event/example_thermostat.py +0 -0
  252. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_event/example_volterralotka_event.py +0 -0
  253. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_odes/example_bonhoeffer_vanderpol.py +0 -0
  254. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_odes/example_brusselator.py +0 -0
  255. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_odes/example_chemical.py +0 -0
  256. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_odes/example_duffing.py +0 -0
  257. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_odes/example_fairen_velarde.py +0 -0
  258. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_odes/example_fitzhughnagumo.py +0 -0
  259. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_odes/example_flame.py +0 -0
  260. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_odes/example_glycolysis.py +0 -0
  261. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_odes/example_lorenz.py +0 -0
  262. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_odes/example_morse.py +0 -0
  263. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_odes/example_robertson.py +0 -0
  264. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_odes/example_roessler.py +0 -0
  265. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_odes/example_thomas_cyclic.py +0 -0
  266. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_odes/example_vanderpol.py +0 -0
  267. {pathsim-0.25.1 → pathsim-0.27.0}/examples/examples_odes/example_volterralotka.py +0 -0
  268. {pathsim-0.25.1 → pathsim-0.27.0}/git +0 -0
  269. {pathsim-0.25.1 → pathsim-0.27.0}/setup.cfg +0 -0
  270. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/__init__.py +0 -0
  271. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/_constants.py +0 -0
  272. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/README.md +0 -0
  273. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/__init__.py +0 -0
  274. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/_block.py +0 -0
  275. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/adder.py +0 -0
  276. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/amplifier.py +0 -0
  277. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/bvp.py +0 -0
  278. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/comparator.py +0 -0
  279. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/constraint.py +0 -0
  280. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/converters.py +0 -0
  281. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/counter.py +0 -0
  282. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/ctrl.py +0 -0
  283. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/delay.py +0 -0
  284. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/differentiator.py +0 -0
  285. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/discrete.py +0 -0
  286. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/divider.py +0 -0
  287. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/dynsys.py +0 -0
  288. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/filters.py +0 -0
  289. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/fmu.py +0 -0
  290. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/function.py +0 -0
  291. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/integrator.py +0 -0
  292. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/kalman.py +0 -0
  293. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/logic.py +0 -0
  294. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/lti.py +0 -0
  295. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/math.py +0 -0
  296. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/multiplier.py +0 -0
  297. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/noise.py +0 -0
  298. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/ode.py +0 -0
  299. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/relay.py +0 -0
  300. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/rf.py +0 -0
  301. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/rng.py +0 -0
  302. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/scope.py +0 -0
  303. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/sources.py +0 -0
  304. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/spectrum.py +0 -0
  305. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/switch.py +0 -0
  306. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/table.py +0 -0
  307. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/blocks/wrapper.py +0 -0
  308. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/connection.py +0 -0
  309. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/events/__init__.py +0 -0
  310. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/events/_event.py +0 -0
  311. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/events/condition.py +0 -0
  312. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/events/schedule.py +0 -0
  313. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/events/zerocrossing.py +0 -0
  314. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/exceptions.py +0 -0
  315. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/optim/__init__.py +0 -0
  316. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/optim/anderson.py +0 -0
  317. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/optim/booster.py +0 -0
  318. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/optim/linearization.py +0 -0
  319. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/optim/newton.py +0 -0
  320. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/optim/numerical.py +0 -0
  321. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/optim/operator.py +0 -0
  322. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/simulation.py +0 -0
  323. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/README.md +0 -0
  324. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/__init__.py +0 -0
  325. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/_rungekutta.py +0 -0
  326. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/_solver.py +0 -0
  327. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/bdf.py +0 -0
  328. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/dirk2.py +0 -0
  329. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/dirk3.py +0 -0
  330. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/esdirk32.py +0 -0
  331. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/esdirk4.py +0 -0
  332. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/esdirk43.py +0 -0
  333. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/esdirk54.py +0 -0
  334. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/esdirk85.py +0 -0
  335. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/euler.py +0 -0
  336. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/gear.py +0 -0
  337. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/rk4.py +0 -0
  338. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/rkbs32.py +0 -0
  339. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/rkck54.py +0 -0
  340. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/rkdp54.py +0 -0
  341. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/rkdp87.py +0 -0
  342. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/rkf21.py +0 -0
  343. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/rkf45.py +0 -0
  344. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/rkf78.py +0 -0
  345. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/rkv65.py +0 -0
  346. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/ssprk22.py +0 -0
  347. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/ssprk33.py +0 -0
  348. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/ssprk34.py +0 -0
  349. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/solvers/steadystate.py +0 -0
  350. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/subsystem.py +0 -0
  351. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/utils/__init__.py +0 -0
  352. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/utils/adaptivebuffer.py +0 -0
  353. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/utils/analysis.py +0 -0
  354. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/utils/deprecation.py +0 -0
  355. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/utils/diagnostics.py +0 -0
  356. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/utils/fmuwrapper.py +0 -0
  357. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/utils/gilbert.py +0 -0
  358. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/utils/logger.py +0 -0
  359. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/utils/mutable.py +0 -0
  360. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/utils/portreference.py +0 -0
  361. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/utils/progresstracker.py +0 -0
  362. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/utils/realtimeplotter.py +0 -0
  363. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim/utils/register.py +0 -0
  364. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim.egg-info/dependency_links.txt +0 -0
  365. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim.egg-info/requires.txt +0 -0
  366. {pathsim-0.25.1 → pathsim-0.27.0}/src/pathsim.egg-info/top_level.txt +0 -0
  367. {pathsim-0.25.1 → pathsim-0.27.0}/tests/README.md +0 -0
  368. {pathsim-0.25.1 → pathsim-0.27.0}/tests/__init__.py +0 -0
  369. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/CoupledClutches_CS.fmu +0 -0
  370. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/__init__.py +0 -0
  371. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/conftest.py +0 -0
  372. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_algebraic_system.py +0 -0
  373. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_bouncingball_friction_event_system.py +0 -0
  374. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_bouncingball_system.py +0 -0
  375. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_brusselator_system.py +0 -0
  376. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_cosim_fmu_system.py +0 -0
  377. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_counter_comparator_system.py +0 -0
  378. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_dynamical_system_ivp.py +0 -0
  379. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_fitzhughnagumo_system.py +0 -0
  380. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_harmonic_oscillator_system.py +0 -0
  381. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_linear_feedback_system.py +0 -0
  382. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_logic_system.py +0 -0
  383. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_lorenz_system.py +0 -0
  384. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_me_analytical.py +0 -0
  385. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_model_exchange_fmu_system.py +0 -0
  386. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_pid_system.py +0 -0
  387. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_relay_thermostat_system.py +0 -0
  388. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_rescale_delay_system.py +0 -0
  389. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_robertson_system.py +0 -0
  390. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_roessler_system.py +0 -0
  391. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_signal_processing_system.py +0 -0
  392. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_steadystate_transient_system.py +0 -0
  393. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_switch_lti_system.py +0 -0
  394. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_vanderpol_system.py +0 -0
  395. {pathsim-0.25.1 → pathsim-0.27.0}/tests/evals/test_volterralotka_system.py +0 -0
  396. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/__init__.py +0 -0
  397. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/__init__.py +0 -0
  398. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/_embedding.py +0 -0
  399. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/rf/__init__.py +0 -0
  400. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/rf/ring_slot.s2p +0 -0
  401. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/rf/ring_slot_meas.s1p +0 -0
  402. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/rf/test_rf.py +0 -0
  403. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_adder.py +0 -0
  404. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_amplifier.py +0 -0
  405. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_block.py +0 -0
  406. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_bvp.py +0 -0
  407. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_comparator.py +0 -0
  408. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_constraint.py +0 -0
  409. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_converters.py +0 -0
  410. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_counter.py +0 -0
  411. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_ctrl.py +0 -0
  412. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_delay.py +0 -0
  413. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_differentiator.py +0 -0
  414. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_discrete.py +0 -0
  415. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_divider.py +0 -0
  416. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_dynsys.py +0 -0
  417. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_filters.py +0 -0
  418. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_fmu.py +0 -0
  419. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_function.py +0 -0
  420. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_integrator.py +0 -0
  421. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_kalman.py +0 -0
  422. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_logic.py +0 -0
  423. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_lti.py +0 -0
  424. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_math.py +0 -0
  425. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_multiplier.py +0 -0
  426. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_noise.py +0 -0
  427. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_ode.py +0 -0
  428. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_relay.py +0 -0
  429. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_rng.py +0 -0
  430. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_scope.py +0 -0
  431. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_sources.py +0 -0
  432. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_spectrum.py +0 -0
  433. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_switch.py +0 -0
  434. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_table.py +0 -0
  435. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/blocks/test_wrapper.py +0 -0
  436. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/events/__init__.py +0 -0
  437. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/events/test_condition.py +0 -0
  438. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/events/test_event.py +0 -0
  439. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/events/test_schedule.py +0 -0
  440. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/events/test_zerocrossing.py +0 -0
  441. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/optim/__init__.py +0 -0
  442. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/optim/test_anderson.py +0 -0
  443. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/optim/test_linearization.py +0 -0
  444. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/optim/test_newton.py +0 -0
  445. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/optim/test_numerical.py +0 -0
  446. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/optim/test_operator.py +0 -0
  447. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/__init__.py +0 -0
  448. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/_referenceproblems.py +0 -0
  449. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_bdf.py +0 -0
  450. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_dirk2.py +0 -0
  451. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_dirk3.py +0 -0
  452. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_esdirk32.py +0 -0
  453. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_esdirk4.py +0 -0
  454. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_esdirk43.py +0 -0
  455. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_esdirk54.py +0 -0
  456. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_esdirk85.py +0 -0
  457. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_euler.py +0 -0
  458. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_gear.py +0 -0
  459. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_rfk21.py +0 -0
  460. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_rk4.py +0 -0
  461. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_rkbs32.py +0 -0
  462. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_rkck54.py +0 -0
  463. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_rkdp54.py +0 -0
  464. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_rkdp87.py +0 -0
  465. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_rkf45.py +0 -0
  466. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_rkf78.py +0 -0
  467. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_rkv65.py +0 -0
  468. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_solver.py +0 -0
  469. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_ssprk22.py +0 -0
  470. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_ssprk33.py +0 -0
  471. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_ssprk34.py +0 -0
  472. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/solvers/test_steadystate.py +0 -0
  473. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/test_auto_initial_step.py +0 -0
  474. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/test_checkpoint.py +0 -0
  475. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/test_connection.py +0 -0
  476. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/test_diagnostics.py +0 -0
  477. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/test_simulation_pss.py +0 -0
  478. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/test_subsystem.py +0 -0
  479. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/utils/__init__.py +0 -0
  480. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/utils/test_adaptivebuffer.py +0 -0
  481. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/utils/test_analysis.py +0 -0
  482. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/utils/test_fmuwrapper.py +0 -0
  483. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/utils/test_gilbert.py +0 -0
  484. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/utils/test_logger.py +0 -0
  485. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/utils/test_mutable.py +0 -0
  486. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/utils/test_portreference.py +0 -0
  487. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/utils/test_progresstracker.py +0 -0
  488. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/utils/test_realtimeplotter.py +0 -0
  489. {pathsim-0.25.1 → pathsim-0.27.0}/tests/pathsim/utils/test_register.py +0 -0
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pathsim
3
- Version: 0.25.1
3
+ Version: 0.27.0
4
4
  Summary: A differentiable block based hybrid system simulation framework.
5
5
  Author-email: Milan Rother <milan.rother@gmx.de>
6
6
  License: MIT
7
7
  Project-URL: Homepage, https://github.com/pathsim/pathsim
8
- Project-URL: documentation, https://pathsim.readthedocs.io/en/latest/
8
+ Project-URL: documentation, https://docs.pathsim.org
9
9
  Keywords: simulation,differentiable,hybrid systems
10
10
  Classifier: Programming Language :: Python :: 3
11
11
  Classifier: License :: OSI Approved :: MIT License
@@ -28,7 +28,7 @@ test = ["pytest", "pytest-cov", "pytest-xdist", "FMPy", "scikit-rf"]
28
28
 
29
29
  [project.urls]
30
30
  Homepage = "https://github.com/pathsim/pathsim"
31
- documentation = "https://pathsim.readthedocs.io/en/latest/"
31
+ documentation = "https://docs.pathsim.org"
32
32
 
33
33
  [tool.pytest.ini_options]
34
34
  addopts = "-m 'not slow'"
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.25.1'
22
- __version_tuple__ = version_tuple = (0, 25, 1)
21
+ __version__ = version = '0.27.0'
22
+ __version_tuple__ = version_tuple = (0, 27, 0)
23
23
 
24
- __commit_id__ = commit_id = 'gea36c5c1e'
24
+ __commit_id__ = commit_id = 'g2cbb2f919'
@@ -16,6 +16,8 @@ from ._block import Block
16
16
  from ..optim.operator import DynamicOperator
17
17
  from ..optim.anderson import NewtonAnderson, solve_root
18
18
 
19
+ from .._constants import SOL_TOLERANCE_FPI
20
+
19
21
 
20
22
  # BLOCKS ================================================================================
21
23
 
@@ -54,10 +56,22 @@ class SemiExplicitDAE(Block):
54
56
  Note
55
57
  ----
56
58
  The reduced Jacobian :math:`\\partial \\dot{x} / \\partial x` handed to
57
- implicit solvers is obtained from central finite differences through the
58
- eliminated constraint. An analytical Jacobian :math:`\\partial
59
- f_\\mathrm{alg} / \\partial z` accelerates the inner constraint solve and
60
- can be supplied via `jac_z`.
59
+ implicit solvers follows from the implicit function theorem,
60
+
61
+ .. math::
62
+
63
+ \\frac{\\partial \\dot{x}}{\\partial x}
64
+ = \\frac{\\partial f_\\mathrm{dyn}}{\\partial x}
65
+ - \\frac{\\partial f_\\mathrm{dyn}}{\\partial z}
66
+ \\left(\\frac{\\partial f_\\mathrm{alg}}{\\partial z}\\right)^{-1}
67
+ \\frac{\\partial f_\\mathrm{alg}}{\\partial x}
68
+
69
+ It is used analytically when `jac_z`, `jac_dyn_x`, `jac_dyn_z` and
70
+ `jac_alg_x` are all supplied, otherwise it is approximated by central
71
+ finite differences through the eliminated constraint, which requires one
72
+ constraint solve per differential state and becomes expensive for large
73
+ systems. An analytical `jac_z` alone accelerates the inner constraint
74
+ solve.
61
75
 
62
76
  Example
63
77
  -------
@@ -99,6 +113,19 @@ class SemiExplicitDAE(Block):
99
113
  optional analytical jacobian of `func_alg` with respect to `z` with
100
114
  signature `jac_z(x, z, u, t)`, central finite differences are used if
101
115
  `None`
116
+ jac_dyn_x : callable, None
117
+ optional analytical jacobian of `func_dyn` with respect to `x` with
118
+ signature `jac_dyn_x(x, z, u, t)`, used for the reduced jacobian
119
+ jac_dyn_z : callable, None
120
+ optional analytical jacobian of `func_dyn` with respect to `z` with
121
+ signature `jac_dyn_z(x, z, u, t)`, used for the reduced jacobian
122
+ jac_alg_x : callable, None
123
+ optional analytical jacobian of `func_alg` with respect to `x` with
124
+ signature `jac_alg_x(x, z, u, t)`, used for the reduced jacobian
125
+ tolerance : float
126
+ convergence tolerance on the residual norm of the algebraic constraint
127
+ solve, loosen it for ill-conditioned constraints whose residual cannot
128
+ reach the default due to roundoff
102
129
 
103
130
  Attributes
104
131
  ----------
@@ -117,7 +144,11 @@ class SemiExplicitDAE(Block):
117
144
  func_alg=lambda x, z, u, t: z,
118
145
  initial_value=0.0,
119
146
  z0=0.0,
120
- jac_z=None
147
+ jac_z=None,
148
+ jac_dyn_x=None,
149
+ jac_dyn_z=None,
150
+ jac_alg_x=None,
151
+ tolerance=SOL_TOLERANCE_FPI
121
152
  ):
122
153
 
123
154
  super().__init__()
@@ -126,9 +157,17 @@ class SemiExplicitDAE(Block):
126
157
  self.func_dyn = func_dyn
127
158
  self.func_alg = func_alg
128
159
 
160
+ #convergence tolerance of the algebraic constraint solve
161
+ self.tolerance = tolerance
162
+
129
163
  #optional analytical jacobian of the constraint w.r.t. z
130
164
  self.jac_z = jac_z
131
165
 
166
+ #optional analytical jacobians for the reduced jacobian
167
+ self.jac_dyn_x = jac_dyn_x
168
+ self.jac_dyn_z = jac_dyn_z
169
+ self.jac_alg_x = jac_alg_x
170
+
132
171
  #initial condition of the differential states (drives the engine)
133
172
  self.initial_value = np.atleast_1d(initial_value).astype(float)
134
173
 
@@ -140,8 +179,12 @@ class SemiExplicitDAE(Block):
140
179
  self.opt = NewtonAnderson()
141
180
 
142
181
  #dynamic operator for the reduced right hand side, mirrors the ODE block
143
- #and supplies the engine Jacobian through 'op_dyn.jac_x'
144
- self.op_dyn = DynamicOperator(func=self._rhs)
182
+ #and supplies the engine Jacobian through 'op_dyn.jac_x'; the reduced
183
+ #Jacobian is analytic (implicit function theorem) when all jacobians
184
+ #are given, otherwise the operator falls back to finite differences
185
+ _all_jacs = (jac_z, jac_dyn_x, jac_dyn_z, jac_alg_x)
186
+ _jac_x = self._reduced_jac if all(j is not None for j in _all_jacs) else None
187
+ self.op_dyn = DynamicOperator(func=self._rhs, jac_x=_jac_x)
145
188
 
146
189
  #pre-size the output register to the stacked state [x, z]
147
190
  self.outputs.update_from_array(
@@ -188,7 +231,7 @@ class SemiExplicitDAE(Block):
188
231
  """
189
232
  _func = lambda z: self.func_alg(x, z, u, t)
190
233
  _jac = None if self.jac_z is None else (lambda z: self.jac_z(x, z, u, t))
191
- z, _, _ = solve_root(self.opt, _func, self._z, _jac)
234
+ z, _, _ = solve_root(self.opt, _func, self._z, _jac, tolerance=self.tolerance)
192
235
  return z
193
236
 
194
237
 
@@ -213,6 +256,33 @@ class SemiExplicitDAE(Block):
213
256
  return self.func_dyn(x, self._solve_z(x, u, t), u, t)
214
257
 
215
258
 
259
+ def _reduced_jac(self, x, u, t):
260
+ """Analytical reduced Jacobian from the implicit function theorem,
261
+ :math:`f_x - f_z (g_z)^{-1} g_x` with the dynamic part `f` and the
262
+ algebraic constraint `g`.
263
+
264
+ Parameters
265
+ ----------
266
+ x : array[float]
267
+ current differential states
268
+ u : array[float]
269
+ current block input
270
+ t : float
271
+ evaluation time
272
+
273
+ Returns
274
+ -------
275
+ J : array[array[float]]
276
+ reduced jacobian of the differential states
277
+ """
278
+ z = self._solve_z(x, u, t)
279
+ fx = np.atleast_2d(self.jac_dyn_x(x, z, u, t))
280
+ fz = np.atleast_2d(self.jac_dyn_z(x, z, u, t))
281
+ gx = np.atleast_2d(self.jac_alg_x(x, z, u, t))
282
+ gz = np.atleast_2d(self.jac_z(x, z, u, t))
283
+ return fx - fz @ np.linalg.solve(gz, gx)
284
+
285
+
216
286
  def update(self, t):
217
287
  """Eliminate the algebraic states for the current input and expose the
218
288
  stacked state [x, z] at the output.
@@ -354,6 +424,10 @@ class MassMatrixDAE(Block):
354
424
  jac : callable, None
355
425
  optional analytical jacobian of `func` with respect to `x` with
356
426
  signature `jac(x, u, t)`, central finite differences are used if `None`
427
+ tolerance : float
428
+ convergence tolerance on the residual norm of the algebraic constraint
429
+ solve, loosen it for ill-conditioned constraints whose residual cannot
430
+ reach the default due to roundoff
357
431
 
358
432
  Attributes
359
433
  ----------
@@ -367,13 +441,24 @@ class MassMatrixDAE(Block):
367
441
  internal Newton-Anderson optimizer for the algebraic constraints
368
442
  """
369
443
 
370
- def __init__(self, func=lambda x, u, t: -x, mass=1.0, initial_value=0.0, jac=None):
444
+ def __init__(
445
+ self,
446
+ func=lambda x, u, t: -x,
447
+ mass=1.0,
448
+ initial_value=0.0,
449
+ jac=None,
450
+ tolerance=SOL_TOLERANCE_FPI
451
+ ):
452
+
371
453
  super().__init__()
372
454
 
373
455
  #right hand side and optional analytical jacobian
374
456
  self.func = func
375
457
  self.jac = jac
376
458
 
459
+ #convergence tolerance of the algebraic constraint solve
460
+ self.tolerance = tolerance
461
+
377
462
  #constant mass matrix
378
463
  M = np.atleast_2d(np.asarray(mass, dtype=float))
379
464
  n = M.shape[0]
@@ -389,20 +474,54 @@ class MassMatrixDAE(Block):
389
474
  )
390
475
  self._x0 = x0
391
476
 
392
- #partition into differential (nonzero row) and algebraic (zero row) states
393
- _nonzero_row = np.any(M != 0.0, axis=1)
394
- self._d = np.flatnonzero(_nonzero_row)
395
- self._a = np.flatnonzero(~_nonzero_row)
477
+ #partition into differential (nonzero column) and algebraic (zero column) states
478
+ _nonzero_column = np.any(M != 0.0, axis=0)
479
+ self._d = np.flatnonzero(_nonzero_column)
480
+ self._a = np.flatnonzero(~_nonzero_column)
481
+
482
+ #partition into differential (nonzero row) and algebraic (zero row) equations
483
+ _non_zero_rows = np.any(M != 0.0, axis=1)
484
+ self._d_equations = np.flatnonzero(_non_zero_rows)
485
+ self._a_equations = np.flatnonzero(~_non_zero_rows)
396
486
 
397
487
  #index-1 form: differential rows must not weight algebraic derivatives
398
- if self._a.size and np.any(M[np.ix_(self._d, self._a)] != 0.0):
488
+ if self._a.size and np.any(M[np.ix_(self._d_equations, self._a)] != 0.0):
399
489
  raise ValueError(
400
490
  "mass matrix is not in index-1 form: differential rows couple "
401
491
  "to the derivatives of algebraic states"
402
492
  )
403
493
 
404
- #LU factorisation of the (constant) differential mass block
405
- self._lu = lu_factor(M[np.ix_(self._d, self._d)])
494
+ #factorise the constant differential mass block when it is square; use
495
+ #the pseudoinverse for rectangular reduced systems so underdetermined
496
+ #differential blocks still admit a minimum-norm solution.
497
+ self._d_mass = M[np.ix_(self._d_equations, self._d)]
498
+ if self._d_mass.shape[0] == self._d_mass.shape[1]:
499
+ self._lu = lu_factor(self._d_mass)
500
+ self._solve_mass_rhs = lambda rhs: lu_solve(self._lu, rhs)
501
+ self._solve_mass_matrix = lambda mat: lu_solve(self._lu, mat)
502
+ else:
503
+ # Use SVD once and apply the pseudoinverse implicitly for stability
504
+ # and to avoid forming a dense pseudoinverse matrix.
505
+ U, s, Vt = np.linalg.svd(self._d_mass, full_matrices=False)
506
+ eps = np.finfo(float).eps
507
+ tol = max(self._d_mass.shape) * (s.max() if s.size else 0.0) * eps
508
+ s_inv = np.array([1.0/si if si > tol else 0.0 for si in s])
509
+
510
+ # store factors (optional) and set solver callables
511
+ self._svd_U = U
512
+ self._svd_s_inv = s_inv
513
+ self._svd_Vt = Vt
514
+
515
+ def _solve_mass_rhs(rhs):
516
+ # rhs can be vector or matrix; apply V * S_inv * (U.T @ rhs)
517
+ return (Vt.T * s_inv) @ (U.T @ rhs)
518
+
519
+ def _solve_mass_matrix(mat):
520
+ # mat: matrix of columns to be solved
521
+ return (Vt.T * s_inv) @ (U.T @ mat)
522
+
523
+ self._solve_mass_rhs = _solve_mass_rhs
524
+ self._solve_mass_matrix = _solve_mass_matrix
406
525
 
407
526
  #the engine integrates only the differential states
408
527
  self.initial_value = x0[self._d]
@@ -418,7 +537,9 @@ class MassMatrixDAE(Block):
418
537
  #when 'jac' is given, otherwise the operator falls back to finite differences
419
538
  _jac_x = None
420
539
  if self._a.size == 0 and jac is not None:
421
- _jac_x = lambda x, u, t: lu_solve(self._lu, np.atleast_2d(jac(x, u, t)))
540
+ def _jac_x(x, u, t):
541
+ J = np.atleast_2d(jac(x, u, t))[np.ix_(self._d_equations, self._d)]
542
+ return self._solve_mass_matrix(J)
422
543
  self.op_dyn = DynamicOperator(func=self._rhs, jac_x=_jac_x)
423
544
 
424
545
  #pre-size the output register to the full state
@@ -496,7 +617,7 @@ class MassMatrixDAE(Block):
496
617
  x[self._d], x[self._a] = x_d, xa
497
618
  return np.atleast_2d(self.jac(x, u, t))[np.ix_(self._a, self._a)]
498
619
 
499
- xa, _, _ = solve_root(self.opt, _res, self._xa, _jac)
620
+ xa, _, _ = solve_root(self.opt, _res, self._xa, _jac, tolerance=self.tolerance)
500
621
  return xa
501
622
 
502
623
 
@@ -524,7 +645,7 @@ class MassMatrixDAE(Block):
524
645
  xa = self._solve_xa(x_d, u, t)
525
646
  x = np.empty(self.mass.shape[0])
526
647
  x[self._d], x[self._a] = x_d, xa
527
- return lu_solve(self._lu, self.func(x, u, t)[self._d])
648
+ return self._solve_mass_rhs(self.func(x, u, t)[self._d_equations])
528
649
 
529
650
 
530
651
  def update(self, t):
@@ -561,7 +682,8 @@ class MassMatrixDAE(Block):
561
682
 
562
683
  #commit the warm-start at the current state, then linearize around it
563
684
  self._xa = self._solve_xa(x_d, u, t)
564
- f = lu_solve(self._lu, self.func(self._full(x_d), u, t)[self._d])
685
+ f = self._solve_mass_rhs(self.func(self._full(x_d), u, t)[self._d_equations])
686
+
565
687
  J = self.op_dyn.jac_x(x_d, u, t)
566
688
 
567
689
  return self.engine.solve(f, J, dt)
@@ -588,7 +710,7 @@ class MassMatrixDAE(Block):
588
710
  """
589
711
  x_d, u = self.engine.state, self.inputs.to_array()
590
712
  self._xa = self._solve_xa(x_d, u, t)
591
- f = lu_solve(self._lu, self.func(self._full(x_d), u, t)[self._d])
713
+ f = self._solve_mass_rhs(self.func(self._full(x_d), u, t)[self._d_equations])
592
714
  return self.engine.step(f, dt)
593
715
 
594
716
 
@@ -666,6 +788,10 @@ class FullyImplicitDAE(Block):
666
788
  signature `jac_xdot(x, xdot, u, t)`, accelerates the inner solve and is
667
789
  used for the reduced jacobian, central finite differences are used if
668
790
  `None`
791
+ tolerance : float
792
+ convergence tolerance on the residual norm of the state derivative
793
+ solve, loosen it for ill-conditioned residuals that cannot reach the
794
+ default due to roundoff
669
795
 
670
796
  Attributes
671
797
  ----------
@@ -682,7 +808,8 @@ class FullyImplicitDAE(Block):
682
808
  func=lambda x, xdot, u, t: xdot + x,
683
809
  initial_value=0.0,
684
810
  jac_x=None,
685
- jac_xdot=None
811
+ jac_xdot=None,
812
+ tolerance=SOL_TOLERANCE_FPI
686
813
  ):
687
814
 
688
815
  super().__init__()
@@ -692,6 +819,9 @@ class FullyImplicitDAE(Block):
692
819
  self.jac_x = jac_x
693
820
  self.jac_xdot = jac_xdot
694
821
 
822
+ #convergence tolerance of the state derivative solve
823
+ self.tolerance = tolerance
824
+
695
825
  #initial condition of the state (drives the engine)
696
826
  self.initial_value = np.atleast_1d(initial_value).astype(float)
697
827
 
@@ -746,7 +876,7 @@ class FullyImplicitDAE(Block):
746
876
  _res = lambda xd: self.func(x, xd, u, t)
747
877
  _jac = None if self.jac_xdot is None \
748
878
  else (lambda xd: self.jac_xdot(x, xd, u, t))
749
- xdot, _, _ = solve_root(self.opt, _res, self._xdot, _jac)
879
+ xdot, _, _ = solve_root(self.opt, _res, self._xdot, _jac, tolerance=self.tolerance)
750
880
  return xdot
751
881
 
752
882
 
@@ -331,19 +331,22 @@ class Graph:
331
331
  """Optimized loop processing with minimal overhead.
332
332
 
333
333
  Finds strongly connected components (SCCs) within the loop blocks, determines
334
- entry points for each SCC, and performs BFS to assign local depths. Identifies
334
+ entry points for each SCC, and performs BFS to assign local depths. Includes
335
+ acyclic descendants in dependency order alongside cycles. Identifies
335
336
  loop-closing connections (back edges) that need special handling.
336
337
 
337
338
  Parameters
338
339
  ----------
339
340
  blocks_loop : set
340
- set of blocks that are part of algebraic loops
341
+ set of blocks that are part of or depend on algebraic loops
341
342
  """
342
343
  if not blocks_loop:
343
344
  return
344
345
 
345
- # Find SCCs (already optimized)
346
- sccs = self._find_strongly_connected_components(blocks_loop)
346
+ # Tarjan emits downstream components before their upstream dependencies.
347
+ # Reverse that order so each component receives updated upstream outputs
348
+ # before it is evaluated in the same loop-solver iteration.
349
+ sccs = reversed(self._find_strongly_connected_components(blocks_loop))
347
350
 
348
351
  current_depth = 0
349
352
 
@@ -433,7 +436,7 @@ class Graph:
433
436
  def _find_strongly_connected_components(self, blocks):
434
437
  """Iterative Tarjan's algorithm using cleaner state machine.
435
438
 
436
- Finds strongly connected components (cycles) within the given blocks using
439
+ Finds all strongly connected components within the given blocks using
437
440
  an iterative implementation of Tarjan's algorithm. Avoids recursion limits
438
441
  that can occur with deep graphs.
439
442
 
@@ -445,7 +448,7 @@ class Graph:
445
448
  Returns
446
449
  -------
447
450
  list
448
- list of SCCs, where each SCC is a list of blocks forming a cycle
451
+ list of SCCs in reverse topological order, including acyclic singletons
449
452
  """
450
453
  if not blocks:
451
454
  return []
@@ -508,11 +511,12 @@ class Graph:
508
511
  if w == node:
509
512
  break
510
513
 
511
- # Keep only actual cycles
512
- if len(scc) > 1:
513
- result.append(scc)
514
- elif scc[0] in successors_cache[scc[0]]:
515
- result.append(scc)
514
+ # A block downstream of a loop can form a singleton SCC
515
+ # without being part of a cycle. Its loop dependency keeps
516
+ # it out of the ordinary DAG schedule, so discarding it here
517
+ # would leave it unevaluated. Keep it in the loop schedule;
518
+ # only actual cycle-closing connections receive acceleration.
519
+ result.append(scc)
516
520
 
517
521
  # Update parent's lowlink if there is a parent
518
522
  if work_stack:
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pathsim
3
- Version: 0.25.1
3
+ Version: 0.27.0
4
4
  Summary: A differentiable block based hybrid system simulation framework.
5
5
  Author-email: Milan Rother <milan.rother@gmx.de>
6
6
  License: MIT
7
7
  Project-URL: Homepage, https://github.com/pathsim/pathsim
8
- Project-URL: documentation, https://pathsim.readthedocs.io/en/latest/
8
+ Project-URL: documentation, https://docs.pathsim.org
9
9
  Keywords: simulation,differentiable,hybrid systems
10
10
  Classifier: Programming Language :: Python :: 3
11
11
  Classifier: License :: OSI Approved :: MIT License
@@ -12,21 +12,7 @@ pyproject.toml
12
12
  .github/workflows/pypi_deployment.yml
13
13
  .github/workflows/tests_codecov.yml
14
14
  .github/workflows/urlchecker.yml
15
- docs/.readthedocs.yaml
16
- docs/Makefile
17
- docs/requirements.txt
18
- docs/source/api.rst
19
- docs/source/conf.py
20
- docs/source/contributing.rst
21
- docs/source/examples.rst
22
- docs/source/index.rst
23
15
  docs/source/pathsim_docs.mplstyle
24
- docs/source/quickstart.ipynb
25
- docs/source/roadmap.rst
26
- docs/source/roadmap_generated.rst
27
- docs/source/_ext/github_issues.py
28
- docs/source/_static/custom.css
29
- docs/source/_static/redirect.js
30
16
  docs/source/examples/abs_braking.ipynb
31
17
  docs/source/examples/algebraic_loop.ipynb
32
18
  docs/source/examples/billards.ipynb
@@ -110,92 +96,9 @@ docs/source/examples/figures/figures_g/vanderpol_subsystem_lvl1_g.png
110
96
  docs/source/examples/figures/figures_g/vanderpol_subsystem_lvl2_g.png
111
97
  docs/source/examples/figures/figures_g/vanderpol_subsystem_lvl3_g.png
112
98
  docs/source/examples/figures/figures_g/volterralotka_blockdiagram_g.png
113
- docs/source/figures/pathsim_object_hierarchy_g.png
114
- docs/source/figures/pathsim_solver_hierarchy_g.png
115
- docs/source/figures/sin_cos_blockdiagram_g.png
116
- docs/source/figures/system_g.png
117
99
  docs/source/logos/pathsim_icon.png
118
100
  docs/source/logos/pathsim_logo.png
119
101
  docs/source/logos/pathsim_simplistic_logo.png
120
- docs/source/modules/pathsim.blocks._block.rst
121
- docs/source/modules/pathsim.blocks.adder.rst
122
- docs/source/modules/pathsim.blocks.amplifier.rst
123
- docs/source/modules/pathsim.blocks.comparator.rst
124
- docs/source/modules/pathsim.blocks.converters.rst
125
- docs/source/modules/pathsim.blocks.counter.rst
126
- docs/source/modules/pathsim.blocks.ctrl.rst
127
- docs/source/modules/pathsim.blocks.delay.rst
128
- docs/source/modules/pathsim.blocks.differentiator.rst
129
- docs/source/modules/pathsim.blocks.discrete.rst
130
- docs/source/modules/pathsim.blocks.dynsys.rst
131
- docs/source/modules/pathsim.blocks.filters.rst
132
- docs/source/modules/pathsim.blocks.fmu.rst
133
- docs/source/modules/pathsim.blocks.function.rst
134
- docs/source/modules/pathsim.blocks.integrator.rst
135
- docs/source/modules/pathsim.blocks.kalman.rst
136
- docs/source/modules/pathsim.blocks.lti.rst
137
- docs/source/modules/pathsim.blocks.math.rst
138
- docs/source/modules/pathsim.blocks.multiplier.rst
139
- docs/source/modules/pathsim.blocks.noise.rst
140
- docs/source/modules/pathsim.blocks.ode.rst
141
- docs/source/modules/pathsim.blocks.relay.rst
142
- docs/source/modules/pathsim.blocks.rf.rst
143
- docs/source/modules/pathsim.blocks.rng.rst
144
- docs/source/modules/pathsim.blocks.rst
145
- docs/source/modules/pathsim.blocks.scope.rst
146
- docs/source/modules/pathsim.blocks.sources.rst
147
- docs/source/modules/pathsim.blocks.spectrum.rst
148
- docs/source/modules/pathsim.blocks.switch.rst
149
- docs/source/modules/pathsim.blocks.table.rst
150
- docs/source/modules/pathsim.blocks.wrapper.rst
151
- docs/source/modules/pathsim.connection.rst
152
- docs/source/modules/pathsim.events._event.rst
153
- docs/source/modules/pathsim.events.condition.rst
154
- docs/source/modules/pathsim.events.rst
155
- docs/source/modules/pathsim.events.schedule.rst
156
- docs/source/modules/pathsim.events.zerocrossing.rst
157
- docs/source/modules/pathsim.optim.anderson.rst
158
- docs/source/modules/pathsim.optim.booster.rst
159
- docs/source/modules/pathsim.optim.numerical.rst
160
- docs/source/modules/pathsim.optim.operator.rst
161
- docs/source/modules/pathsim.optim.rst
162
- docs/source/modules/pathsim.simulation.rst
163
- docs/source/modules/pathsim.solvers._rungekutta.rst
164
- docs/source/modules/pathsim.solvers._solver.rst
165
- docs/source/modules/pathsim.solvers.bdf.rst
166
- docs/source/modules/pathsim.solvers.dirk2.rst
167
- docs/source/modules/pathsim.solvers.dirk3.rst
168
- docs/source/modules/pathsim.solvers.esdirk32.rst
169
- docs/source/modules/pathsim.solvers.esdirk4.rst
170
- docs/source/modules/pathsim.solvers.esdirk43.rst
171
- docs/source/modules/pathsim.solvers.esdirk54.rst
172
- docs/source/modules/pathsim.solvers.esdirk85.rst
173
- docs/source/modules/pathsim.solvers.euler.rst
174
- docs/source/modules/pathsim.solvers.gear.rst
175
- docs/source/modules/pathsim.solvers.rk4.rst
176
- docs/source/modules/pathsim.solvers.rkbs32.rst
177
- docs/source/modules/pathsim.solvers.rkck54.rst
178
- docs/source/modules/pathsim.solvers.rkdp54.rst
179
- docs/source/modules/pathsim.solvers.rkdp87.rst
180
- docs/source/modules/pathsim.solvers.rkf21.rst
181
- docs/source/modules/pathsim.solvers.rkf45.rst
182
- docs/source/modules/pathsim.solvers.rkf78.rst
183
- docs/source/modules/pathsim.solvers.rkv65.rst
184
- docs/source/modules/pathsim.solvers.rst
185
- docs/source/modules/pathsim.solvers.ssprk22.rst
186
- docs/source/modules/pathsim.solvers.ssprk33.rst
187
- docs/source/modules/pathsim.solvers.ssprk34.rst
188
- docs/source/modules/pathsim.solvers.steadystate.rst
189
- docs/source/modules/pathsim.subsystem.rst
190
- docs/source/modules/pathsim.utils.adaptivebuffer.rst
191
- docs/source/modules/pathsim.utils.analysis.rst
192
- docs/source/modules/pathsim.utils.gilbert.rst
193
- docs/source/modules/pathsim.utils.logger.rst
194
- docs/source/modules/pathsim.utils.portreference.rst
195
- docs/source/modules/pathsim.utils.progresstracker.rst
196
- docs/source/modules/pathsim.utils.realtimeplotter.rst
197
- docs/source/modules/pathsim.utils.register.rst
198
- docs/source/modules/pathsim.utils.rst
199
102
  examples/example_abs_braking.py
200
103
  examples/example_adc.py
201
104
  examples/example_algebraicchain.py
@@ -12,16 +12,6 @@
12
12
  "LICENSE.txt",
13
13
  "README.md",
14
14
  "conftest.py",
15
- "docs/.readthedocs.yaml",
16
- "docs/Makefile",
17
- "docs/requirements.txt",
18
- "docs/source/_ext/github_issues.py",
19
- "docs/source/_static/custom.css",
20
- "docs/source/_static/redirect.js",
21
- "docs/source/api.rst",
22
- "docs/source/conf.py",
23
- "docs/source/contributing.rst",
24
- "docs/source/examples.rst",
25
15
  "docs/source/examples/abs_braking.ipynb",
26
16
  "docs/source/examples/algebraic_loop.ipynb",
27
17
  "docs/source/examples/billards.ipynb",
@@ -105,97 +95,10 @@
105
95
  "docs/source/examples/thermostat.ipynb",
106
96
  "docs/source/examples/transfer_function.ipynb",
107
97
  "docs/source/examples/vanderpol.ipynb",
108
- "docs/source/figures/pathsim_object_hierarchy_g.png",
109
- "docs/source/figures/pathsim_solver_hierarchy_g.png",
110
- "docs/source/figures/sin_cos_blockdiagram_g.png",
111
- "docs/source/figures/system_g.png",
112
- "docs/source/index.rst",
113
98
  "docs/source/logos/pathsim_icon.png",
114
99
  "docs/source/logos/pathsim_logo.png",
115
100
  "docs/source/logos/pathsim_simplistic_logo.png",
116
- "docs/source/modules/pathsim.blocks._block.rst",
117
- "docs/source/modules/pathsim.blocks.adder.rst",
118
- "docs/source/modules/pathsim.blocks.amplifier.rst",
119
- "docs/source/modules/pathsim.blocks.comparator.rst",
120
- "docs/source/modules/pathsim.blocks.converters.rst",
121
- "docs/source/modules/pathsim.blocks.counter.rst",
122
- "docs/source/modules/pathsim.blocks.ctrl.rst",
123
- "docs/source/modules/pathsim.blocks.delay.rst",
124
- "docs/source/modules/pathsim.blocks.differentiator.rst",
125
- "docs/source/modules/pathsim.blocks.discrete.rst",
126
- "docs/source/modules/pathsim.blocks.dynsys.rst",
127
- "docs/source/modules/pathsim.blocks.filters.rst",
128
- "docs/source/modules/pathsim.blocks.fmu.rst",
129
- "docs/source/modules/pathsim.blocks.function.rst",
130
- "docs/source/modules/pathsim.blocks.integrator.rst",
131
- "docs/source/modules/pathsim.blocks.kalman.rst",
132
- "docs/source/modules/pathsim.blocks.lti.rst",
133
- "docs/source/modules/pathsim.blocks.math.rst",
134
- "docs/source/modules/pathsim.blocks.multiplier.rst",
135
- "docs/source/modules/pathsim.blocks.noise.rst",
136
- "docs/source/modules/pathsim.blocks.ode.rst",
137
- "docs/source/modules/pathsim.blocks.relay.rst",
138
- "docs/source/modules/pathsim.blocks.rf.rst",
139
- "docs/source/modules/pathsim.blocks.rng.rst",
140
- "docs/source/modules/pathsim.blocks.rst",
141
- "docs/source/modules/pathsim.blocks.scope.rst",
142
- "docs/source/modules/pathsim.blocks.sources.rst",
143
- "docs/source/modules/pathsim.blocks.spectrum.rst",
144
- "docs/source/modules/pathsim.blocks.switch.rst",
145
- "docs/source/modules/pathsim.blocks.table.rst",
146
- "docs/source/modules/pathsim.blocks.wrapper.rst",
147
- "docs/source/modules/pathsim.connection.rst",
148
- "docs/source/modules/pathsim.events._event.rst",
149
- "docs/source/modules/pathsim.events.condition.rst",
150
- "docs/source/modules/pathsim.events.rst",
151
- "docs/source/modules/pathsim.events.schedule.rst",
152
- "docs/source/modules/pathsim.events.zerocrossing.rst",
153
- "docs/source/modules/pathsim.optim.anderson.rst",
154
- "docs/source/modules/pathsim.optim.booster.rst",
155
- "docs/source/modules/pathsim.optim.numerical.rst",
156
- "docs/source/modules/pathsim.optim.operator.rst",
157
- "docs/source/modules/pathsim.optim.rst",
158
- "docs/source/modules/pathsim.simulation.rst",
159
- "docs/source/modules/pathsim.solvers._rungekutta.rst",
160
- "docs/source/modules/pathsim.solvers._solver.rst",
161
- "docs/source/modules/pathsim.solvers.bdf.rst",
162
- "docs/source/modules/pathsim.solvers.dirk2.rst",
163
- "docs/source/modules/pathsim.solvers.dirk3.rst",
164
- "docs/source/modules/pathsim.solvers.esdirk32.rst",
165
- "docs/source/modules/pathsim.solvers.esdirk4.rst",
166
- "docs/source/modules/pathsim.solvers.esdirk43.rst",
167
- "docs/source/modules/pathsim.solvers.esdirk54.rst",
168
- "docs/source/modules/pathsim.solvers.esdirk85.rst",
169
- "docs/source/modules/pathsim.solvers.euler.rst",
170
- "docs/source/modules/pathsim.solvers.gear.rst",
171
- "docs/source/modules/pathsim.solvers.rk4.rst",
172
- "docs/source/modules/pathsim.solvers.rkbs32.rst",
173
- "docs/source/modules/pathsim.solvers.rkck54.rst",
174
- "docs/source/modules/pathsim.solvers.rkdp54.rst",
175
- "docs/source/modules/pathsim.solvers.rkdp87.rst",
176
- "docs/source/modules/pathsim.solvers.rkf21.rst",
177
- "docs/source/modules/pathsim.solvers.rkf45.rst",
178
- "docs/source/modules/pathsim.solvers.rkf78.rst",
179
- "docs/source/modules/pathsim.solvers.rkv65.rst",
180
- "docs/source/modules/pathsim.solvers.rst",
181
- "docs/source/modules/pathsim.solvers.ssprk22.rst",
182
- "docs/source/modules/pathsim.solvers.ssprk33.rst",
183
- "docs/source/modules/pathsim.solvers.ssprk34.rst",
184
- "docs/source/modules/pathsim.solvers.steadystate.rst",
185
- "docs/source/modules/pathsim.subsystem.rst",
186
- "docs/source/modules/pathsim.utils.adaptivebuffer.rst",
187
- "docs/source/modules/pathsim.utils.analysis.rst",
188
- "docs/source/modules/pathsim.utils.gilbert.rst",
189
- "docs/source/modules/pathsim.utils.logger.rst",
190
- "docs/source/modules/pathsim.utils.portreference.rst",
191
- "docs/source/modules/pathsim.utils.progresstracker.rst",
192
- "docs/source/modules/pathsim.utils.realtimeplotter.rst",
193
- "docs/source/modules/pathsim.utils.register.rst",
194
- "docs/source/modules/pathsim.utils.rst",
195
101
  "docs/source/pathsim_docs.mplstyle",
196
- "docs/source/quickstart.ipynb",
197
- "docs/source/roadmap.rst",
198
- "docs/source/roadmap_generated.rst",
199
102
  "examples/example_abs_braking.py",
200
103
  "examples/example_adc.py",
201
104
  "examples/example_algebraicchain.py",