pathsim 0.24.0__tar.gz → 0.25.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 (490) hide show
  1. {pathsim-0.24.0 → pathsim-0.25.0}/PKG-INFO +2 -1
  2. {pathsim-0.24.0 → pathsim-0.25.0}/README.md +1 -0
  3. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/_version.py +3 -3
  4. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/dynsys.py +2 -1
  5. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/math.py +7 -3
  6. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/relay.py +13 -0
  7. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/scope.py +30 -35
  8. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/events/schedule.py +80 -12
  9. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim.egg-info/PKG-INFO +2 -1
  10. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim.egg-info/scm_file_list.json +437 -437
  11. pathsim-0.25.0/src/pathsim.egg-info/scm_version.json +8 -0
  12. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_dynsys.py +9 -0
  13. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_math.py +13 -0
  14. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_relay.py +14 -0
  15. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_scope.py +62 -2
  16. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_wrapper.py +3 -1
  17. pathsim-0.25.0/tests/pathsim/events/test_schedule.py +338 -0
  18. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/test_subsystem.py +29 -0
  19. pathsim-0.24.0/src/pathsim.egg-info/scm_version.json +0 -8
  20. pathsim-0.24.0/tests/pathsim/events/test_schedule.py +0 -174
  21. {pathsim-0.24.0 → pathsim-0.25.0}/.codecov.yml +0 -0
  22. {pathsim-0.24.0 → pathsim-0.25.0}/.github/FUNDING.yml +0 -0
  23. {pathsim-0.24.0 → pathsim-0.25.0}/.github/pull_request_template.md +0 -0
  24. {pathsim-0.24.0 → pathsim-0.25.0}/.github/workflows/pypi_deployment.yml +0 -0
  25. {pathsim-0.24.0 → pathsim-0.25.0}/.github/workflows/tests_codecov.yml +0 -0
  26. {pathsim-0.24.0 → pathsim-0.25.0}/.github/workflows/urlchecker.yml +0 -0
  27. {pathsim-0.24.0 → pathsim-0.25.0}/.gitignore +0 -0
  28. {pathsim-0.24.0 → pathsim-0.25.0}/CITATION.cff +0 -0
  29. {pathsim-0.24.0 → pathsim-0.25.0}/CONTRIBUTING.md +0 -0
  30. {pathsim-0.24.0 → pathsim-0.25.0}/LICENSE.txt +0 -0
  31. {pathsim-0.24.0 → pathsim-0.25.0}/conftest.py +0 -0
  32. {pathsim-0.24.0 → pathsim-0.25.0}/docs/.readthedocs.yaml +0 -0
  33. {pathsim-0.24.0 → pathsim-0.25.0}/docs/Makefile +0 -0
  34. {pathsim-0.24.0 → pathsim-0.25.0}/docs/requirements.txt +0 -0
  35. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/_ext/github_issues.py +0 -0
  36. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/_static/custom.css +0 -0
  37. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/_static/redirect.js +0 -0
  38. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/api.rst +0 -0
  39. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/conf.py +0 -0
  40. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/contributing.rst +0 -0
  41. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/abs_braking.ipynb +0 -0
  42. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/algebraic_loop.ipynb +0 -0
  43. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/billards.ipynb +0 -0
  44. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/bouncing_ball.ipynb +0 -0
  45. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/bouncing_pendulum.ipynb +0 -0
  46. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/cascade_controller.ipynb +0 -0
  47. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/checkpoints.ipynb +0 -0
  48. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/chemical_reactor.ipynb +0 -0
  49. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/coupled_oscillators.ipynb +0 -0
  50. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/data/BouncingBall_ME.fmu +0 -0
  51. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/data/CoupledClutches_CS_linux64.fmu +0 -0
  52. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/data/CoupledClutches_CS_win64.fmu +0 -0
  53. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/data/Dahlquist.fmu +0 -0
  54. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/data/VanDerPol_ME.fmu +0 -0
  55. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/dcmotor_control.ipynb +0 -0
  56. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/delta_sigma_adc.ipynb +0 -0
  57. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/diode_circuit.ipynb +0 -0
  58. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/elastic_pendulum.ipynb +0 -0
  59. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/algebraicloop_blockdiagram_g.png +0 -0
  60. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/billard_circle_g.png +0 -0
  61. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/bouncing_ball_blockdiagram_g.png +0 -0
  62. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/bouncing_ball_both_g.png +0 -0
  63. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/bouncing_ball_g.png +0 -0
  64. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/bouncing_ball_result_events_g.png +0 -0
  65. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/bouncing_ball_result_g.png +0 -0
  66. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/bouncing_ball_result_timesteps_g.png +0 -0
  67. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/bouncing_pendulum_blockdiagram_g.png +0 -0
  68. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/cascade_blockdiagram_g.png +0 -0
  69. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/coupled_oscillators_blockdiagram_g.png +0 -0
  70. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/coupled_oscillators_g.png +0 -0
  71. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/delta_sigma_blockdiagram_g.png +0 -0
  72. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/diode_blockdiagram_g.png +0 -0
  73. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/elastic_pendulum_g.png +0 -0
  74. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/fmcw_blockdiagram_g.png +0 -0
  75. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/fmcw_g.png +0 -0
  76. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/harmonic_oscillator_g.png +0 -0
  77. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/harmonic_oscillator_result_g.png +0 -0
  78. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/kalman_filter_blockdiagram_g.png +0 -0
  79. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/linear_feedback_blockdiagram_g.png +0 -0
  80. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/linear_feedback_result_g.png +0 -0
  81. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/linear_feedback_result_sensitivity_g.png +0 -0
  82. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/miller_frequency_divider_blockdiagram_g.png +0 -0
  83. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/nonlinear_noisy_amplifier_blockdiagram_g.png +0 -0
  84. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/ode_blockdiagram_g.png +0 -0
  85. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/pendulum_blockdiagram_g.png +0 -0
  86. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/pid_blockdiagram_g.png +0 -0
  87. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/sar_adc_blockdiagram_g.png +0 -0
  88. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/stick_slip_blockdiagram_g.png +0 -0
  89. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/stick_slip_blockdiagram_slip_g.png +0 -0
  90. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/stick_slip_blockdiagram_stick_g.png +0 -0
  91. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/stick_slip_g.png +0 -0
  92. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/thermostat_blockdiagram_g.png +0 -0
  93. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/vanderpol_blockdiagram_g.png +0 -0
  94. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/vanderpol_result_g.png +0 -0
  95. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/vanderpol_subsystem_blockdiagram_g.png +0 -0
  96. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/vanderpol_subsystem_lvl1_g.png +0 -0
  97. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/vanderpol_subsystem_lvl2_g.png +0 -0
  98. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/vanderpol_subsystem_lvl3_g.png +0 -0
  99. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/figures_g/volterralotka_blockdiagram_g.png +0 -0
  100. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/ode_blockdiagram_2.png +0 -0
  101. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/stick_slip_blockdiagram_slip.png +0 -0
  102. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/figures/stick_slip_blockdiagram_stick.png +0 -0
  103. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/fmcw_radar.ipynb +0 -0
  104. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/fmu_cosimulation.ipynb +0 -0
  105. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/fmu_model_exchange_bouncing_ball.ipynb +0 -0
  106. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/fmu_model_exchange_vanderpol.ipynb +0 -0
  107. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/harmonic_oscillator.ipynb +0 -0
  108. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/kalman_filter.ipynb +0 -0
  109. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/linear_feedback.ipynb +0 -0
  110. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/lorenz_attractor.ipynb +0 -0
  111. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/nested_subsystems.ipynb +0 -0
  112. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/noisy_amplifier.ipynb +0 -0
  113. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/pendulum.ipynb +0 -0
  114. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/pid_controller.ipynb +0 -0
  115. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/poincare_maps.ipynb +0 -0
  116. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/rf_network_oneport.ipynb +0 -0
  117. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/sar_adc.ipynb +0 -0
  118. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/spectrum_analysis.ipynb +0 -0
  119. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/stick_slip.ipynb +0 -0
  120. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/switched_bouncing_ball.ipynb +0 -0
  121. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/thermostat.ipynb +0 -0
  122. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/transfer_function.ipynb +0 -0
  123. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples/vanderpol.ipynb +0 -0
  124. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/examples.rst +0 -0
  125. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/figures/pathsim_object_hierarchy_g.png +0 -0
  126. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/figures/pathsim_solver_hierarchy_g.png +0 -0
  127. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/figures/sin_cos_blockdiagram_g.png +0 -0
  128. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/figures/system_g.png +0 -0
  129. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/index.rst +0 -0
  130. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/logos/pathsim_icon.png +0 -0
  131. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/logos/pathsim_logo.png +0 -0
  132. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/logos/pathsim_simplistic_logo.png +0 -0
  133. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks._block.rst +0 -0
  134. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.adder.rst +0 -0
  135. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.amplifier.rst +0 -0
  136. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.comparator.rst +0 -0
  137. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.converters.rst +0 -0
  138. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.counter.rst +0 -0
  139. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.ctrl.rst +0 -0
  140. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.delay.rst +0 -0
  141. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.differentiator.rst +0 -0
  142. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.discrete.rst +0 -0
  143. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.dynsys.rst +0 -0
  144. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.filters.rst +0 -0
  145. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.fmu.rst +0 -0
  146. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.function.rst +0 -0
  147. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.integrator.rst +0 -0
  148. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.kalman.rst +0 -0
  149. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.lti.rst +0 -0
  150. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.math.rst +0 -0
  151. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.multiplier.rst +0 -0
  152. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.noise.rst +0 -0
  153. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.ode.rst +0 -0
  154. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.relay.rst +0 -0
  155. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.rf.rst +0 -0
  156. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.rng.rst +0 -0
  157. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.rst +0 -0
  158. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.scope.rst +0 -0
  159. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.sources.rst +0 -0
  160. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.spectrum.rst +0 -0
  161. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.switch.rst +0 -0
  162. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.table.rst +0 -0
  163. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.blocks.wrapper.rst +0 -0
  164. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.connection.rst +0 -0
  165. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.events._event.rst +0 -0
  166. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.events.condition.rst +0 -0
  167. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.events.rst +0 -0
  168. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.events.schedule.rst +0 -0
  169. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.events.zerocrossing.rst +0 -0
  170. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.optim.anderson.rst +0 -0
  171. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.optim.booster.rst +0 -0
  172. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.optim.numerical.rst +0 -0
  173. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.optim.operator.rst +0 -0
  174. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.optim.rst +0 -0
  175. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.simulation.rst +0 -0
  176. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers._rungekutta.rst +0 -0
  177. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers._solver.rst +0 -0
  178. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.bdf.rst +0 -0
  179. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.dirk2.rst +0 -0
  180. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.dirk3.rst +0 -0
  181. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.esdirk32.rst +0 -0
  182. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.esdirk4.rst +0 -0
  183. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.esdirk43.rst +0 -0
  184. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.esdirk54.rst +0 -0
  185. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.esdirk85.rst +0 -0
  186. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.euler.rst +0 -0
  187. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.gear.rst +0 -0
  188. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.rk4.rst +0 -0
  189. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.rkbs32.rst +0 -0
  190. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.rkck54.rst +0 -0
  191. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.rkdp54.rst +0 -0
  192. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.rkdp87.rst +0 -0
  193. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.rkf21.rst +0 -0
  194. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.rkf45.rst +0 -0
  195. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.rkf78.rst +0 -0
  196. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.rkv65.rst +0 -0
  197. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.rst +0 -0
  198. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.ssprk22.rst +0 -0
  199. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.ssprk33.rst +0 -0
  200. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.ssprk34.rst +0 -0
  201. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.solvers.steadystate.rst +0 -0
  202. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.subsystem.rst +0 -0
  203. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.utils.adaptivebuffer.rst +0 -0
  204. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.utils.analysis.rst +0 -0
  205. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.utils.gilbert.rst +0 -0
  206. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.utils.logger.rst +0 -0
  207. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.utils.portreference.rst +0 -0
  208. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.utils.progresstracker.rst +0 -0
  209. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.utils.realtimeplotter.rst +0 -0
  210. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.utils.register.rst +0 -0
  211. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/modules/pathsim.utils.rst +0 -0
  212. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/pathsim_docs.mplstyle +0 -0
  213. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/quickstart.ipynb +0 -0
  214. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/roadmap.rst +0 -0
  215. {pathsim-0.24.0 → pathsim-0.25.0}/docs/source/roadmap_generated.rst +0 -0
  216. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_abs_braking.py +0 -0
  217. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_adc.py +0 -0
  218. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_algebraicchain.py +0 -0
  219. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_algebraicloop.py +0 -0
  220. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_cascade.py +0 -0
  221. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_dcmotor.py +0 -0
  222. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_deltasigma.py +0 -0
  223. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_derivative.py +0 -0
  224. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_diode.py +0 -0
  225. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_dualslope.py +0 -0
  226. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_elastic_pendulum.py +0 -0
  227. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_feedback.py +0 -0
  228. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_filters.py +0 -0
  229. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_harmonic_oscillator.py +0 -0
  230. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_kalman_filter.py +0 -0
  231. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_nested_subsystems.py +0 -0
  232. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_noise.py +0 -0
  233. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_pendulum.py +0 -0
  234. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_phasenoise.py +0 -0
  235. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_pid.py +0 -0
  236. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_pid_antiwindup.py +0 -0
  237. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_pid_vs_discretePID.py +0 -0
  238. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_radar.py +0 -0
  239. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_reactor.py +0 -0
  240. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_sar.py +0 -0
  241. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_solar.py +0 -0
  242. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_solver_hotswap.py +0 -0
  243. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_spectrum.py +0 -0
  244. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_spectrum_rf_oneport.py +0 -0
  245. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_steadystate.py +0 -0
  246. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_stickslip.py +0 -0
  247. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_transferfunction.py +0 -0
  248. {pathsim-0.24.0 → pathsim-0.25.0}/examples/example_vanderpol_subsystem.py +0 -0
  249. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_event/example_billards_sphere.py +0 -0
  250. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_event/example_bouncing_pendulum.py +0 -0
  251. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_event/example_bouncingball.py +0 -0
  252. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_event/example_bouncingball_friction.py +0 -0
  253. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_event/example_bouncingball_switched.py +0 -0
  254. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_event/example_integrator_reset.py +0 -0
  255. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_event/example_pulse.py +0 -0
  256. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_event/example_stickslip_event.py +0 -0
  257. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_event/example_thermostat.py +0 -0
  258. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_event/example_volterralotka_event.py +0 -0
  259. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_odes/example_bonhoeffer_vanderpol.py +0 -0
  260. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_odes/example_brusselator.py +0 -0
  261. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_odes/example_chemical.py +0 -0
  262. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_odes/example_duffing.py +0 -0
  263. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_odes/example_fairen_velarde.py +0 -0
  264. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_odes/example_fitzhughnagumo.py +0 -0
  265. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_odes/example_flame.py +0 -0
  266. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_odes/example_glycolysis.py +0 -0
  267. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_odes/example_lorenz.py +0 -0
  268. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_odes/example_morse.py +0 -0
  269. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_odes/example_robertson.py +0 -0
  270. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_odes/example_roessler.py +0 -0
  271. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_odes/example_thomas_cyclic.py +0 -0
  272. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_odes/example_vanderpol.py +0 -0
  273. {pathsim-0.24.0 → pathsim-0.25.0}/examples/examples_odes/example_volterralotka.py +0 -0
  274. {pathsim-0.24.0 → pathsim-0.25.0}/git +0 -0
  275. {pathsim-0.24.0 → pathsim-0.25.0}/pyproject.toml +0 -0
  276. {pathsim-0.24.0 → pathsim-0.25.0}/setup.cfg +0 -0
  277. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/__init__.py +0 -0
  278. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/_constants.py +0 -0
  279. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/README.md +0 -0
  280. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/__init__.py +0 -0
  281. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/_block.py +0 -0
  282. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/adder.py +0 -0
  283. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/amplifier.py +0 -0
  284. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/bvp.py +0 -0
  285. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/comparator.py +0 -0
  286. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/constraint.py +0 -0
  287. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/converters.py +0 -0
  288. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/counter.py +0 -0
  289. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/ctrl.py +0 -0
  290. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/dae.py +0 -0
  291. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/delay.py +0 -0
  292. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/differentiator.py +0 -0
  293. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/discrete.py +0 -0
  294. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/divider.py +0 -0
  295. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/filters.py +0 -0
  296. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/fmu.py +0 -0
  297. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/function.py +0 -0
  298. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/integrator.py +0 -0
  299. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/kalman.py +0 -0
  300. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/logic.py +0 -0
  301. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/lti.py +0 -0
  302. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/multiplier.py +0 -0
  303. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/noise.py +0 -0
  304. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/ode.py +0 -0
  305. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/rf.py +0 -0
  306. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/rng.py +0 -0
  307. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/sources.py +0 -0
  308. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/spectrum.py +0 -0
  309. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/switch.py +0 -0
  310. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/table.py +0 -0
  311. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/blocks/wrapper.py +0 -0
  312. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/connection.py +0 -0
  313. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/events/__init__.py +0 -0
  314. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/events/_event.py +0 -0
  315. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/events/condition.py +0 -0
  316. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/events/zerocrossing.py +0 -0
  317. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/exceptions.py +0 -0
  318. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/optim/__init__.py +0 -0
  319. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/optim/anderson.py +0 -0
  320. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/optim/booster.py +0 -0
  321. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/optim/linearization.py +0 -0
  322. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/optim/newton.py +0 -0
  323. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/optim/numerical.py +0 -0
  324. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/optim/operator.py +0 -0
  325. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/simulation.py +0 -0
  326. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/README.md +0 -0
  327. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/__init__.py +0 -0
  328. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/_rungekutta.py +0 -0
  329. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/_solver.py +0 -0
  330. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/bdf.py +0 -0
  331. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/dirk2.py +0 -0
  332. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/dirk3.py +0 -0
  333. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/esdirk32.py +0 -0
  334. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/esdirk4.py +0 -0
  335. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/esdirk43.py +0 -0
  336. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/esdirk54.py +0 -0
  337. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/esdirk85.py +0 -0
  338. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/euler.py +0 -0
  339. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/gear.py +0 -0
  340. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/rk4.py +0 -0
  341. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/rkbs32.py +0 -0
  342. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/rkck54.py +0 -0
  343. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/rkdp54.py +0 -0
  344. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/rkdp87.py +0 -0
  345. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/rkf21.py +0 -0
  346. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/rkf45.py +0 -0
  347. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/rkf78.py +0 -0
  348. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/rkv65.py +0 -0
  349. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/ssprk22.py +0 -0
  350. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/ssprk33.py +0 -0
  351. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/ssprk34.py +0 -0
  352. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/solvers/steadystate.py +0 -0
  353. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/subsystem.py +0 -0
  354. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/utils/__init__.py +0 -0
  355. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/utils/adaptivebuffer.py +0 -0
  356. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/utils/analysis.py +0 -0
  357. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/utils/deprecation.py +0 -0
  358. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/utils/diagnostics.py +0 -0
  359. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/utils/fmuwrapper.py +0 -0
  360. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/utils/gilbert.py +0 -0
  361. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/utils/graph.py +0 -0
  362. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/utils/logger.py +0 -0
  363. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/utils/mutable.py +0 -0
  364. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/utils/portreference.py +0 -0
  365. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/utils/progresstracker.py +0 -0
  366. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/utils/realtimeplotter.py +0 -0
  367. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim/utils/register.py +0 -0
  368. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim.egg-info/SOURCES.txt +0 -0
  369. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim.egg-info/dependency_links.txt +0 -0
  370. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim.egg-info/requires.txt +0 -0
  371. {pathsim-0.24.0 → pathsim-0.25.0}/src/pathsim.egg-info/top_level.txt +0 -0
  372. {pathsim-0.24.0 → pathsim-0.25.0}/tests/README.md +0 -0
  373. {pathsim-0.24.0 → pathsim-0.25.0}/tests/__init__.py +0 -0
  374. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/CoupledClutches_CS.fmu +0 -0
  375. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/__init__.py +0 -0
  376. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/conftest.py +0 -0
  377. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_algebraic_system.py +0 -0
  378. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_bouncingball_friction_event_system.py +0 -0
  379. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_bouncingball_system.py +0 -0
  380. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_brusselator_system.py +0 -0
  381. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_cosim_fmu_system.py +0 -0
  382. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_counter_comparator_system.py +0 -0
  383. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_dynamical_system_ivp.py +0 -0
  384. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_fitzhughnagumo_system.py +0 -0
  385. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_harmonic_oscillator_system.py +0 -0
  386. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_linear_feedback_system.py +0 -0
  387. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_logic_system.py +0 -0
  388. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_lorenz_system.py +0 -0
  389. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_me_analytical.py +0 -0
  390. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_model_exchange_fmu_system.py +0 -0
  391. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_pid_system.py +0 -0
  392. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_relay_thermostat_system.py +0 -0
  393. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_rescale_delay_system.py +0 -0
  394. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_robertson_system.py +0 -0
  395. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_roessler_system.py +0 -0
  396. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_signal_processing_system.py +0 -0
  397. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_steadystate_transient_system.py +0 -0
  398. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_switch_lti_system.py +0 -0
  399. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_vanderpol_system.py +0 -0
  400. {pathsim-0.24.0 → pathsim-0.25.0}/tests/evals/test_volterralotka_system.py +0 -0
  401. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/__init__.py +0 -0
  402. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/__init__.py +0 -0
  403. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/_embedding.py +0 -0
  404. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/rf/__init__.py +0 -0
  405. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/rf/ring_slot.s2p +0 -0
  406. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/rf/ring_slot_meas.s1p +0 -0
  407. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/rf/test_rf.py +0 -0
  408. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_adder.py +0 -0
  409. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_amplifier.py +0 -0
  410. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_block.py +0 -0
  411. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_bvp.py +0 -0
  412. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_comparator.py +0 -0
  413. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_constraint.py +0 -0
  414. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_converters.py +0 -0
  415. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_counter.py +0 -0
  416. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_ctrl.py +0 -0
  417. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_dae.py +0 -0
  418. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_delay.py +0 -0
  419. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_differentiator.py +0 -0
  420. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_discrete.py +0 -0
  421. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_divider.py +0 -0
  422. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_filters.py +0 -0
  423. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_fmu.py +0 -0
  424. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_function.py +0 -0
  425. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_integrator.py +0 -0
  426. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_kalman.py +0 -0
  427. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_logic.py +0 -0
  428. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_lti.py +0 -0
  429. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_multiplier.py +0 -0
  430. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_noise.py +0 -0
  431. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_ode.py +0 -0
  432. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_rng.py +0 -0
  433. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_sources.py +0 -0
  434. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_spectrum.py +0 -0
  435. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_switch.py +0 -0
  436. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/blocks/test_table.py +0 -0
  437. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/events/__init__.py +0 -0
  438. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/events/test_condition.py +0 -0
  439. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/events/test_event.py +0 -0
  440. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/events/test_zerocrossing.py +0 -0
  441. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/optim/__init__.py +0 -0
  442. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/optim/test_anderson.py +0 -0
  443. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/optim/test_linearization.py +0 -0
  444. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/optim/test_newton.py +0 -0
  445. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/optim/test_numerical.py +0 -0
  446. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/optim/test_operator.py +0 -0
  447. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/__init__.py +0 -0
  448. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/_referenceproblems.py +0 -0
  449. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_bdf.py +0 -0
  450. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_dirk2.py +0 -0
  451. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_dirk3.py +0 -0
  452. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_esdirk32.py +0 -0
  453. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_esdirk4.py +0 -0
  454. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_esdirk43.py +0 -0
  455. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_esdirk54.py +0 -0
  456. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_esdirk85.py +0 -0
  457. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_euler.py +0 -0
  458. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_gear.py +0 -0
  459. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_rfk21.py +0 -0
  460. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_rk4.py +0 -0
  461. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_rkbs32.py +0 -0
  462. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_rkck54.py +0 -0
  463. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_rkdp54.py +0 -0
  464. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_rkdp87.py +0 -0
  465. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_rkf45.py +0 -0
  466. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_rkf78.py +0 -0
  467. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_rkv65.py +0 -0
  468. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_solver.py +0 -0
  469. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_ssprk22.py +0 -0
  470. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_ssprk33.py +0 -0
  471. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_ssprk34.py +0 -0
  472. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/solvers/test_steadystate.py +0 -0
  473. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/test_auto_initial_step.py +0 -0
  474. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/test_checkpoint.py +0 -0
  475. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/test_connection.py +0 -0
  476. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/test_diagnostics.py +0 -0
  477. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/test_simulation.py +0 -0
  478. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/test_simulation_pss.py +0 -0
  479. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/utils/__init__.py +0 -0
  480. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/utils/test_adaptivebuffer.py +0 -0
  481. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/utils/test_analysis.py +0 -0
  482. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/utils/test_fmuwrapper.py +0 -0
  483. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/utils/test_gilbert.py +0 -0
  484. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/utils/test_graph.py +0 -0
  485. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/utils/test_logger.py +0 -0
  486. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/utils/test_mutable.py +0 -0
  487. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/utils/test_portreference.py +0 -0
  488. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/utils/test_progresstracker.py +0 -0
  489. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/utils/test_realtimeplotter.py +0 -0
  490. {pathsim-0.24.0 → pathsim-0.25.0}/tests/pathsim/utils/test_register.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pathsim
3
- Version: 0.24.0
3
+ Version: 0.25.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
@@ -119,6 +119,7 @@ scp.plot()
119
119
  - [Documentation](https://docs.pathsim.org) — tutorials, examples, and API reference
120
120
  - [Homepage](https://pathsim.org) — overview and getting started
121
121
  - [Contributing](https://docs.pathsim.org/pathsim/latest/contributing) — how to contribute
122
+ - [Consulting & commercial support](https://milanrother.com/consulting/) — integration, custom blocks, migration from closed tools
122
123
 
123
124
  ## Citation
124
125
 
@@ -89,6 +89,7 @@ scp.plot()
89
89
  - [Documentation](https://docs.pathsim.org) — tutorials, examples, and API reference
90
90
  - [Homepage](https://pathsim.org) — overview and getting started
91
91
  - [Contributing](https://docs.pathsim.org/pathsim/latest/contributing) — how to contribute
92
+ - [Consulting & commercial support](https://milanrother.com/consulting/) — integration, custom blocks, migration from closed tools
92
93
 
93
94
  ## Citation
94
95
 
@@ -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.24.0'
22
- __version_tuple__ = version_tuple = (0, 24, 0)
21
+ __version__ = version = '0.25.0'
22
+ __version_tuple__ = version_tuple = (0, 25, 0)
23
23
 
24
- __commit_id__ = commit_id = 'gf8f02298b'
24
+ __commit_id__ = commit_id = 'g405501720'
@@ -93,7 +93,8 @@ class DynamicalSystem(Block):
93
93
  alg_length : int
94
94
  length of algebraic path
95
95
  """
96
- x, u = self.engine.state, self.inputs.to_array()
96
+ x = self.engine.state if self.engine else self.initial_value
97
+ u = self.inputs.to_array()
97
98
  has_passthrough = np.any(self.op_alg.jac_u(x, u, 0.0))
98
99
  return int(has_passthrough)
99
100
 
@@ -601,9 +601,9 @@ class Matrix(Math):
601
601
 
602
602
  Parameters
603
603
  ----------
604
- A : np.ndarray
605
- matrix, 2d array with dim=2
606
-
604
+ A : array_like
605
+ matrix, 2d array-like (nested lists are accepted and converted)
606
+
607
607
  Attributes
608
608
  ----------
609
609
  op_alg : Operator
@@ -613,6 +613,10 @@ class Matrix(Math):
613
613
  def __init__(self, A=np.eye(1)):
614
614
  super().__init__()
615
615
 
616
+ # accept any array-like: a nested list is the natural way to write a
617
+ # small matrix inline, and every other block parameter takes one
618
+ A = np.asarray(A, dtype=float)
619
+
616
620
  # check matrix dimension and shape
617
621
  if not A.ndim == 2:
618
622
  raise ValueError("'A' must be dim 2")
@@ -98,12 +98,25 @@ class Relay(Block):
98
98
  ),
99
99
  ]
100
100
 
101
+ # start in the lower relay state
102
+ self.outputs[0] = self.value_down
103
+
101
104
 
102
105
  def __len__(self):
103
106
  """This block has no direct passthrough"""
104
107
  return 0
105
108
 
106
109
 
110
+ def reset(self):
111
+ """Reset the block and return to the lower relay state.
112
+
113
+ The base reset zeroes the outputs, which is not a relay state -- the
114
+ output must land back on `value_down`, same as after construction.
115
+ """
116
+ super().reset()
117
+ self.outputs[0] = self.value_down
118
+
119
+
107
120
  def update(self, t):
108
121
  """update system equation for fixed point loop,
109
122
  here just setting the outputs
@@ -53,12 +53,9 @@ class Scope(Block):
53
53
  _incremental_idx : int
54
54
  index for incremental reading of accumulated data since last
55
55
  call of incremental read
56
- _sample_next_timestep : bool
57
- flag to indicate this is a timestep to sample, only used for
58
- event based sampling when `sampling_period` is provided as an arg
59
56
  events : list[Schedule]
60
57
  internal scheduled event for periodic input sampling when
61
- `sampling_period` is provided
58
+ `sampling_period` is provided, recording directly in its action
62
59
  """
63
60
 
64
61
  input_port_labels = None
@@ -86,18 +83,15 @@ class Scope(Block):
86
83
  #sampling produces discrete time behavior
87
84
  if not (sampling_period is None):
88
85
 
89
- #flag to indicate this is a timestep to sample
90
- self._sample_next_timestep = False
91
-
92
- #internal scheduled list event
93
- def _sample(t):
94
- self._sample_next_timestep = True
95
-
86
+ #internal scheduled event, recording directly in its action so the
87
+ #timestamps are the scheduled times and no tick can be lost
88
+ #(a flag deferred to the end of the timestep collapses two ticks
89
+ #that land in one step into a single sample)
96
90
  self.events = [
97
91
  Schedule(
98
92
  t_start=t_wait,
99
93
  t_period=sampling_period,
100
- func_act=_sample
94
+ func_act=self._record
101
95
  )
102
96
  ]
103
97
 
@@ -171,30 +165,15 @@ class Scope(Block):
171
165
  )
172
166
 
173
167
 
174
- def sample(self, t, dt):
175
- """Sample the data from all inputs. Skips duplicate timestamps to maintain
176
- unique time points in the recording.
177
-
178
- If `sampling_period` is provided, this depends on the flag `_sample_next_timestep`,
179
- set by the internal `Schedule` event.
168
+ def _record(self, t):
169
+ """Append one sample of all inputs at time 't'. Skips duplicate
170
+ timestamps to maintain unique time points in the recording.
180
171
 
181
172
  Parameters
182
173
  ----------
183
174
  t : float
184
- evaluation time for sampling
175
+ timestamp for the sample
185
176
  """
186
- #determine if we should sample
187
- if self.sampling_period is None:
188
- should_sample = t >= self.t_wait
189
- elif self._sample_next_timestep:
190
- should_sample = True
191
- self._sample_next_timestep = False
192
- else:
193
- should_sample = False
194
-
195
- if not should_sample:
196
- return
197
-
198
177
  #skip duplicate timestamps (can happen when continuing simulation)
199
178
  if self.recording_time and self.recording_time[-1] == t:
200
179
  return
@@ -203,6 +182,26 @@ class Scope(Block):
203
182
  self.recording_data.append(self.inputs.to_array())
204
183
 
205
184
 
185
+ def sample(self, t, dt):
186
+ """Sample the data from all inputs at every timestep.
187
+
188
+ Only active without a `sampling_period`. With one, the internal
189
+ `Schedule` event records in its action instead, stamped with the
190
+ scheduled time rather than the end of the enclosing timestep.
191
+
192
+ Parameters
193
+ ----------
194
+ t : float
195
+ evaluation time for sampling
196
+ """
197
+ #event based sampling records in the Schedule action
198
+ if self.sampling_period is not None:
199
+ return
200
+
201
+ if t >= self.t_wait:
202
+ self._record(t)
203
+
204
+
206
205
  def plot(self, *args, **kwargs):
207
206
  """Directly create a plot of the recorded data for quick visualization and debugging.
208
207
 
@@ -453,8 +452,6 @@ class Scope(Block):
453
452
  json_data, npz_data = super().to_checkpoint(prefix, recordings=recordings)
454
453
 
455
454
  json_data["_incremental_idx"] = self._incremental_idx
456
- if hasattr(self, '_sample_next_timestep'):
457
- json_data["_sample_next_timestep"] = self._sample_next_timestep
458
455
 
459
456
  if recordings and self.recording_time:
460
457
  npz_data[f"{prefix}/recording_time"] = np.array(self.recording_time)
@@ -468,8 +465,6 @@ class Scope(Block):
468
465
  super().load_checkpoint(prefix, json_data, npz)
469
466
 
470
467
  self._incremental_idx = json_data.get("_incremental_idx", 0)
471
- if hasattr(self, '_sample_next_timestep'):
472
- self._sample_next_timestep = json_data.get("_sample_next_timestep", False)
473
468
 
474
469
  #restore recordings if present
475
470
  rt_key = f"{prefix}/recording_time"
@@ -82,6 +82,56 @@ class Schedule(Event):
82
82
  return self.t_start + len(self._times) * self.t_period
83
83
 
84
84
 
85
+ def _spacing(self):
86
+ """
87
+ return the time between the upcoming event and its successor,
88
+ used to bound the effective detection tolerance
89
+ """
90
+ return self.t_period
91
+
92
+
93
+ def _tolerance_at(self, t):
94
+ """Effective detection tolerance at evaluation time 't'.
95
+
96
+ The simulation time is accumulated by repeated addition of the
97
+ timestep, so it drifts away from the exact schedule times by a
98
+ floating point error that grows with 't'. The configured absolute
99
+ tolerance cannot cover this, which makes ticks that land within a
100
+ few ulp of a step boundary flip between neighboring timesteps and
101
+ lose the final tick of a run. The widened tolerance absorbs that
102
+ drift while staying far below the schedule spacing, so no genuine
103
+ tick can be swallowed.
104
+
105
+ Parameters
106
+ ----------
107
+ t : float
108
+ evaluation time for detection
109
+
110
+ Returns
111
+ -------
112
+ float
113
+ effective tolerance for the close-to-event check
114
+ """
115
+ return max(self.tolerance, min(1e-10 * abs(t), 0.1 * self._spacing()))
116
+
117
+
118
+ def resolve(self, t):
119
+ """Resolve the event at the exact scheduled time.
120
+
121
+ The caller passes the numerically reached time, which carries the
122
+ accumulated drift of the simulation clock. The schedule knows its
123
+ own exact event time, so that is what gets recorded and handed to
124
+ the action function - timestamps land exactly on the schedule.
125
+
126
+ Parameters
127
+ ----------
128
+ t : float
129
+ evaluation time for event resolution (ignored in favor of
130
+ the exact scheduled time)
131
+ """
132
+ super().resolve(self._next())
133
+
134
+
85
135
  def estimate(self, t):
86
136
  """Estimate the time until the next scheduled event.
87
137
 
@@ -135,21 +185,26 @@ class Schedule(Event):
135
185
  if self.t_end is not None and t_next > self.t_end:
136
186
  self.off()
137
187
  return False, False, 1.0
138
-
139
- #no event -> quit early
140
- if t_next > t:
188
+
189
+ #effective tolerance, covering the drift of the simulation clock
190
+ _tol = self._tolerance_at(t)
191
+
192
+ #no event -> quit early (a tick within tolerance of the step end
193
+ #counts as inside the step, otherwise clock drift pushes it into
194
+ #the next step and the final tick of a run is lost)
195
+ if t_next > t + _tol:
141
196
  return False, False, 1.0
142
197
 
143
198
  #are we close enough to the scheduled event?
144
- if abs(t_next - t) <= self.tolerance:
145
- return True, True, 0.0
199
+ if abs(t_next - t) <= _tol:
200
+ return True, True, 1.0
146
201
 
147
202
  #unpack history
148
203
  _, _t = self._history
149
204
 
150
205
  #have we already passed the event -> first timestep
151
206
  if _t >= t_next:
152
- return True, True, 0.0
207
+ return True, True, 0.0
153
208
 
154
209
  #whats the timestep ratio?
155
210
  ratio = (t_next - _t) / np.clip(t - _t, TOLERANCE, None)
@@ -214,11 +269,21 @@ class ScheduleList(Schedule):
214
269
  def _next(self):
215
270
  """return the next event from the event time list by index"""
216
271
  _n = len(self._times)
217
- if _n < len(self.times_evt):
272
+ if _n < len(self.times_evt):
218
273
  return self.times_evt[_n]
219
274
  return self.times_evt[-1]
220
275
 
221
276
 
277
+ def _spacing(self):
278
+ """return the gap between the upcoming event and its successor
279
+ in the time list, used to bound the effective detection tolerance
280
+ """
281
+ _n = len(self._times)
282
+ if _n + 1 < len(self.times_evt):
283
+ return self.times_evt[_n + 1] - self.times_evt[_n]
284
+ return float("inf")
285
+
286
+
222
287
  def detect(self, t):
223
288
  """Check if the event condition is satisfied, i.e. if the
224
289
  time period switch is within the current timestep.
@@ -247,20 +312,23 @@ class ScheduleList(Schedule):
247
312
  #get next event time
248
313
  t_next = self._next()
249
314
 
250
- #no event -> quit early
251
- if t_next > t:
315
+ #effective tolerance, covering the drift of the simulation clock
316
+ _tol = self._tolerance_at(t)
317
+
318
+ #no event -> quit early (see 'Schedule.detect')
319
+ if t_next > t + _tol:
252
320
  return False, False, 1.0
253
321
 
254
322
  #are we close enough to the scheduled event?
255
- if abs(t_next - t) <= self.tolerance:
256
- return True, True, 0.0
323
+ if abs(t_next - t) <= _tol:
324
+ return True, True, 1.0
257
325
 
258
326
  #unpack history
259
327
  _, _t = self._history
260
328
 
261
329
  #have we already passed the event -> first timestep
262
330
  if _t >= t_next:
263
- return True, True, 0.0
331
+ return True, True, 0.0
264
332
 
265
333
  #whats the timestep ratio?
266
334
  ratio = (t_next - _t) / np.clip(t - _t, TOLERANCE, None)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pathsim
3
- Version: 0.24.0
3
+ Version: 0.25.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
@@ -119,6 +119,7 @@ scp.plot()
119
119
  - [Documentation](https://docs.pathsim.org) — tutorials, examples, and API reference
120
120
  - [Homepage](https://pathsim.org) — overview and getting started
121
121
  - [Contributing](https://docs.pathsim.org/pathsim/latest/contributing) — how to contribute
122
+ - [Consulting & commercial support](https://milanrother.com/consulting/) — integration, custom blocks, migration from closed tools
122
123
 
123
124
  ## Citation
124
125