pathsim 0.24.0__tar.gz → 0.25.1__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.
- {pathsim-0.24.0 → pathsim-0.25.1}/PKG-INFO +2 -1
- {pathsim-0.24.0 → pathsim-0.25.1}/README.md +1 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/_version.py +3 -3
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/dynsys.py +2 -1
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/math.py +7 -3
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/relay.py +13 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/scope.py +30 -35
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/events/schedule.py +80 -12
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/utils/graph.py +7 -9
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim.egg-info/PKG-INFO +2 -1
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim.egg-info/scm_file_list.json +437 -437
- pathsim-0.25.1/src/pathsim.egg-info/scm_version.json +8 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_dynsys.py +9 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_math.py +13 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_relay.py +14 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_scope.py +62 -2
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_wrapper.py +3 -1
- pathsim-0.25.1/tests/pathsim/events/test_schedule.py +338 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/test_subsystem.py +97 -5
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/utils/test_graph.py +39 -0
- pathsim-0.24.0/src/pathsim.egg-info/scm_version.json +0 -8
- pathsim-0.24.0/tests/pathsim/events/test_schedule.py +0 -174
- {pathsim-0.24.0 → pathsim-0.25.1}/.codecov.yml +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/.github/FUNDING.yml +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/.github/pull_request_template.md +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/.github/workflows/pypi_deployment.yml +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/.github/workflows/tests_codecov.yml +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/.github/workflows/urlchecker.yml +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/.gitignore +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/CITATION.cff +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/CONTRIBUTING.md +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/LICENSE.txt +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/conftest.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/.readthedocs.yaml +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/Makefile +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/requirements.txt +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/_ext/github_issues.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/_static/custom.css +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/_static/redirect.js +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/api.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/conf.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/contributing.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/abs_braking.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/algebraic_loop.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/billards.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/bouncing_ball.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/bouncing_pendulum.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/cascade_controller.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/checkpoints.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/chemical_reactor.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/coupled_oscillators.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/data/BouncingBall_ME.fmu +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/data/CoupledClutches_CS_linux64.fmu +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/data/CoupledClutches_CS_win64.fmu +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/data/Dahlquist.fmu +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/data/VanDerPol_ME.fmu +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/dcmotor_control.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/delta_sigma_adc.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/diode_circuit.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/elastic_pendulum.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/algebraicloop_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/billard_circle_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/bouncing_ball_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/bouncing_ball_both_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/bouncing_ball_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/bouncing_ball_result_events_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/bouncing_ball_result_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/bouncing_ball_result_timesteps_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/bouncing_pendulum_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/cascade_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/coupled_oscillators_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/coupled_oscillators_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/delta_sigma_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/diode_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/elastic_pendulum_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/fmcw_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/fmcw_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/harmonic_oscillator_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/harmonic_oscillator_result_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/kalman_filter_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/linear_feedback_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/linear_feedback_result_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/linear_feedback_result_sensitivity_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/miller_frequency_divider_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/nonlinear_noisy_amplifier_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/ode_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/pendulum_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/pid_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/sar_adc_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/stick_slip_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/stick_slip_blockdiagram_slip_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/stick_slip_blockdiagram_stick_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/stick_slip_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/thermostat_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/vanderpol_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/vanderpol_result_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/vanderpol_subsystem_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/vanderpol_subsystem_lvl1_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/vanderpol_subsystem_lvl2_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/vanderpol_subsystem_lvl3_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/figures_g/volterralotka_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/ode_blockdiagram_2.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/stick_slip_blockdiagram_slip.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/figures/stick_slip_blockdiagram_stick.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/fmcw_radar.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/fmu_cosimulation.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/fmu_model_exchange_bouncing_ball.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/fmu_model_exchange_vanderpol.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/harmonic_oscillator.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/kalman_filter.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/linear_feedback.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/lorenz_attractor.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/nested_subsystems.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/noisy_amplifier.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/pendulum.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/pid_controller.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/poincare_maps.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/rf_network_oneport.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/sar_adc.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/spectrum_analysis.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/stick_slip.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/switched_bouncing_ball.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/thermostat.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/transfer_function.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples/vanderpol.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/examples.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/figures/pathsim_object_hierarchy_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/figures/pathsim_solver_hierarchy_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/figures/sin_cos_blockdiagram_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/figures/system_g.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/index.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/logos/pathsim_icon.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/logos/pathsim_logo.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/logos/pathsim_simplistic_logo.png +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks._block.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.adder.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.amplifier.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.comparator.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.converters.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.counter.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.ctrl.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.delay.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.differentiator.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.discrete.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.dynsys.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.filters.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.fmu.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.function.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.integrator.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.kalman.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.lti.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.math.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.multiplier.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.noise.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.ode.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.relay.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.rf.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.rng.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.scope.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.sources.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.spectrum.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.switch.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.table.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.blocks.wrapper.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.connection.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.events._event.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.events.condition.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.events.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.events.schedule.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.events.zerocrossing.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.optim.anderson.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.optim.booster.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.optim.numerical.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.optim.operator.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.optim.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.simulation.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers._rungekutta.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers._solver.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.bdf.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.dirk2.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.dirk3.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.esdirk32.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.esdirk4.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.esdirk43.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.esdirk54.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.esdirk85.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.euler.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.gear.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.rk4.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.rkbs32.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.rkck54.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.rkdp54.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.rkdp87.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.rkf21.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.rkf45.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.rkf78.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.rkv65.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.ssprk22.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.ssprk33.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.ssprk34.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.solvers.steadystate.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.subsystem.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.utils.adaptivebuffer.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.utils.analysis.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.utils.gilbert.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.utils.logger.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.utils.portreference.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.utils.progresstracker.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.utils.realtimeplotter.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.utils.register.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/modules/pathsim.utils.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/pathsim_docs.mplstyle +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/quickstart.ipynb +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/roadmap.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/docs/source/roadmap_generated.rst +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_abs_braking.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_adc.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_algebraicchain.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_algebraicloop.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_cascade.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_dcmotor.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_deltasigma.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_derivative.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_diode.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_dualslope.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_elastic_pendulum.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_feedback.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_filters.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_harmonic_oscillator.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_kalman_filter.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_nested_subsystems.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_noise.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_pendulum.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_phasenoise.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_pid.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_pid_antiwindup.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_pid_vs_discretePID.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_radar.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_reactor.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_sar.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_solar.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_solver_hotswap.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_spectrum.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_spectrum_rf_oneport.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_steadystate.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_stickslip.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_transferfunction.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/example_vanderpol_subsystem.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_event/example_billards_sphere.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_event/example_bouncing_pendulum.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_event/example_bouncingball.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_event/example_bouncingball_friction.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_event/example_bouncingball_switched.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_event/example_integrator_reset.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_event/example_pulse.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_event/example_stickslip_event.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_event/example_thermostat.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_event/example_volterralotka_event.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_odes/example_bonhoeffer_vanderpol.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_odes/example_brusselator.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_odes/example_chemical.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_odes/example_duffing.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_odes/example_fairen_velarde.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_odes/example_fitzhughnagumo.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_odes/example_flame.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_odes/example_glycolysis.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_odes/example_lorenz.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_odes/example_morse.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_odes/example_robertson.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_odes/example_roessler.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_odes/example_thomas_cyclic.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_odes/example_vanderpol.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/examples/examples_odes/example_volterralotka.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/git +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/pyproject.toml +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/setup.cfg +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/__init__.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/_constants.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/README.md +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/__init__.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/_block.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/adder.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/amplifier.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/bvp.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/comparator.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/constraint.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/converters.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/counter.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/ctrl.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/dae.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/delay.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/differentiator.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/discrete.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/divider.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/filters.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/fmu.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/function.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/integrator.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/kalman.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/logic.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/lti.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/multiplier.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/noise.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/ode.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/rf.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/rng.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/sources.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/spectrum.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/switch.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/table.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/blocks/wrapper.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/connection.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/events/__init__.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/events/_event.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/events/condition.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/events/zerocrossing.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/exceptions.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/optim/__init__.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/optim/anderson.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/optim/booster.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/optim/linearization.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/optim/newton.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/optim/numerical.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/optim/operator.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/simulation.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/README.md +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/__init__.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/_rungekutta.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/_solver.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/bdf.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/dirk2.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/dirk3.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/esdirk32.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/esdirk4.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/esdirk43.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/esdirk54.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/esdirk85.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/euler.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/gear.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/rk4.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/rkbs32.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/rkck54.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/rkdp54.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/rkdp87.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/rkf21.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/rkf45.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/rkf78.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/rkv65.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/ssprk22.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/ssprk33.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/ssprk34.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/solvers/steadystate.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/subsystem.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/utils/__init__.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/utils/adaptivebuffer.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/utils/analysis.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/utils/deprecation.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/utils/diagnostics.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/utils/fmuwrapper.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/utils/gilbert.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/utils/logger.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/utils/mutable.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/utils/portreference.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/utils/progresstracker.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/utils/realtimeplotter.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim/utils/register.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim.egg-info/SOURCES.txt +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim.egg-info/dependency_links.txt +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim.egg-info/requires.txt +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/src/pathsim.egg-info/top_level.txt +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/README.md +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/__init__.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/CoupledClutches_CS.fmu +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/__init__.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/conftest.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_algebraic_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_bouncingball_friction_event_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_bouncingball_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_brusselator_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_cosim_fmu_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_counter_comparator_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_dynamical_system_ivp.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_fitzhughnagumo_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_harmonic_oscillator_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_linear_feedback_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_logic_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_lorenz_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_me_analytical.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_model_exchange_fmu_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_pid_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_relay_thermostat_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_rescale_delay_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_robertson_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_roessler_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_signal_processing_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_steadystate_transient_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_switch_lti_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_vanderpol_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/evals/test_volterralotka_system.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/__init__.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/__init__.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/_embedding.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/rf/__init__.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/rf/ring_slot.s2p +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/rf/ring_slot_meas.s1p +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/rf/test_rf.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_adder.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_amplifier.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_block.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_bvp.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_comparator.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_constraint.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_converters.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_counter.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_ctrl.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_dae.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_delay.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_differentiator.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_discrete.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_divider.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_filters.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_fmu.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_function.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_integrator.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_kalman.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_logic.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_lti.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_multiplier.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_noise.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_ode.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_rng.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_sources.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_spectrum.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_switch.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/blocks/test_table.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/events/__init__.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/events/test_condition.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/events/test_event.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/events/test_zerocrossing.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/optim/__init__.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/optim/test_anderson.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/optim/test_linearization.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/optim/test_newton.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/optim/test_numerical.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/optim/test_operator.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/__init__.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/_referenceproblems.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_bdf.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_dirk2.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_dirk3.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_esdirk32.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_esdirk4.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_esdirk43.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_esdirk54.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_esdirk85.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_euler.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_gear.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_rfk21.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_rk4.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_rkbs32.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_rkck54.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_rkdp54.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_rkdp87.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_rkf45.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_rkf78.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_rkv65.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_solver.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_ssprk22.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_ssprk33.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_ssprk34.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/solvers/test_steadystate.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/test_auto_initial_step.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/test_checkpoint.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/test_connection.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/test_diagnostics.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/test_simulation.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/test_simulation_pss.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/utils/__init__.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/utils/test_adaptivebuffer.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/utils/test_analysis.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/utils/test_fmuwrapper.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/utils/test_gilbert.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/utils/test_logger.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/utils/test_mutable.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/utils/test_portreference.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/utils/test_progresstracker.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/tests/pathsim/utils/test_realtimeplotter.py +0 -0
- {pathsim-0.24.0 → pathsim-0.25.1}/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.
|
|
3
|
+
Version: 0.25.1
|
|
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.
|
|
22
|
-
__version_tuple__ = version_tuple = (0,
|
|
21
|
+
__version__ = version = '0.25.1'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 25, 1)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gea36c5c1e'
|
|
@@ -93,7 +93,8 @@ class DynamicalSystem(Block):
|
|
|
93
93
|
alg_length : int
|
|
94
94
|
length of algebraic path
|
|
95
95
|
"""
|
|
96
|
-
x
|
|
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 :
|
|
605
|
-
matrix, 2d array
|
|
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
|
-
#
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
#
|
|
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=
|
|
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
|
|
175
|
-
"""
|
|
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
|
-
|
|
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
|
-
#
|
|
140
|
-
|
|
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) <=
|
|
145
|
-
return True, True,
|
|
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
|
-
#
|
|
251
|
-
|
|
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) <=
|
|
256
|
-
return True, True,
|
|
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)
|
|
@@ -606,8 +606,10 @@ class Graph:
|
|
|
606
606
|
def _has_algebraic_self_loop(self, block):
|
|
607
607
|
"""Check if a block has an algebraic path back to itself.
|
|
608
608
|
|
|
609
|
-
|
|
610
|
-
|
|
609
|
+
The path leaves the block and returns through algebraic blocks. The
|
|
610
|
+
block itself only bounds the path, so it doesn't have to be algebraic.
|
|
611
|
+
This is the case for the 'Interface' of a 'Subsystem', where a path
|
|
612
|
+
back to itself is an algebraic passthrough of the subsystem.
|
|
611
613
|
|
|
612
614
|
Parameters
|
|
613
615
|
----------
|
|
@@ -619,18 +621,14 @@ class Graph:
|
|
|
619
621
|
bool
|
|
620
622
|
True if an algebraic self-loop exists, False otherwise
|
|
621
623
|
"""
|
|
622
|
-
# Check if block is algebraic
|
|
623
|
-
if block in self._dyn_blocks:
|
|
624
|
-
return False
|
|
625
|
-
|
|
626
624
|
# Get immediate neighbors
|
|
627
625
|
neighbors = self._dnst_blk_blk_map[block]
|
|
628
|
-
|
|
626
|
+
|
|
629
627
|
if not neighbors:
|
|
630
628
|
return False
|
|
631
|
-
|
|
629
|
+
|
|
632
630
|
# BFS from neighbors to see if any path back
|
|
633
|
-
visited =
|
|
631
|
+
visited = set()
|
|
634
632
|
stack = list(neighbors)
|
|
635
633
|
|
|
636
634
|
while stack:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pathsim
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.25.1
|
|
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
|
|