pathsim 0.26.0__tar.gz → 0.27.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pathsim-0.26.0 → pathsim-0.27.0}/PKG-INFO +1 -1
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/_version.py +3 -3
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/dae.py +48 -11
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/utils/graph.py +15 -11
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim.egg-info/PKG-INFO +1 -1
- pathsim-0.27.0/src/pathsim.egg-info/scm_version.json +8 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_dae.py +16 -3
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/test_simulation.py +72 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/utils/test_graph.py +67 -0
- pathsim-0.26.0/src/pathsim.egg-info/scm_version.json +0 -8
- {pathsim-0.26.0 → pathsim-0.27.0}/.codecov.yml +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/.github/FUNDING.yml +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/.github/pull_request_template.md +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/.github/workflows/pypi_deployment.yml +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/.github/workflows/tests_codecov.yml +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/.github/workflows/urlchecker.yml +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/.gitignore +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/CITATION.cff +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/CONTRIBUTING.md +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/LICENSE.txt +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/README.md +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/conftest.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/abs_braking.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/algebraic_loop.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/billards.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/bouncing_ball.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/bouncing_pendulum.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/cascade_controller.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/checkpoints.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/chemical_reactor.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/coupled_oscillators.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/data/BouncingBall_ME.fmu +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/data/CoupledClutches_CS_linux64.fmu +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/data/CoupledClutches_CS_win64.fmu +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/data/Dahlquist.fmu +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/data/VanDerPol_ME.fmu +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/dcmotor_control.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/delta_sigma_adc.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/diode_circuit.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/elastic_pendulum.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/algebraicloop_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/billard_circle_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/bouncing_ball_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/bouncing_ball_both_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/bouncing_ball_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/bouncing_ball_result_events_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/bouncing_ball_result_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/bouncing_ball_result_timesteps_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/bouncing_pendulum_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/cascade_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/coupled_oscillators_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/coupled_oscillators_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/delta_sigma_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/diode_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/elastic_pendulum_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/fmcw_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/fmcw_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/harmonic_oscillator_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/harmonic_oscillator_result_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/kalman_filter_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/linear_feedback_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/linear_feedback_result_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/linear_feedback_result_sensitivity_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/miller_frequency_divider_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/nonlinear_noisy_amplifier_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/ode_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/pendulum_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/pid_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/sar_adc_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/stick_slip_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/stick_slip_blockdiagram_slip_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/stick_slip_blockdiagram_stick_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/stick_slip_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/thermostat_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/vanderpol_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/vanderpol_result_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/vanderpol_subsystem_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/vanderpol_subsystem_lvl1_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/vanderpol_subsystem_lvl2_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/vanderpol_subsystem_lvl3_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/volterralotka_blockdiagram_g.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/ode_blockdiagram_2.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/stick_slip_blockdiagram_slip.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/stick_slip_blockdiagram_stick.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/fmcw_radar.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/fmu_cosimulation.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/fmu_model_exchange_bouncing_ball.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/fmu_model_exchange_vanderpol.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/harmonic_oscillator.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/kalman_filter.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/linear_feedback.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/lorenz_attractor.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/nested_subsystems.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/noisy_amplifier.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/pendulum.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/pid_controller.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/poincare_maps.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/rf_network_oneport.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/sar_adc.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/spectrum_analysis.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/stick_slip.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/switched_bouncing_ball.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/thermostat.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/transfer_function.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/vanderpol.ipynb +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/logos/pathsim_icon.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/logos/pathsim_logo.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/logos/pathsim_simplistic_logo.png +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/docs/source/pathsim_docs.mplstyle +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_abs_braking.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_adc.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_algebraicchain.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_algebraicloop.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_cascade.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_dcmotor.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_deltasigma.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_derivative.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_diode.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_dualslope.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_elastic_pendulum.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_feedback.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_filters.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_harmonic_oscillator.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_kalman_filter.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_nested_subsystems.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_noise.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_pendulum.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_phasenoise.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_pid.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_pid_antiwindup.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_pid_vs_discretePID.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_radar.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_reactor.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_sar.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_solar.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_solver_hotswap.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_spectrum.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_spectrum_rf_oneport.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_steadystate.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_stickslip.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_transferfunction.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/example_vanderpol_subsystem.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_event/example_billards_sphere.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_event/example_bouncing_pendulum.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_event/example_bouncingball.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_event/example_bouncingball_friction.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_event/example_bouncingball_switched.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_event/example_integrator_reset.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_event/example_pulse.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_event/example_stickslip_event.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_event/example_thermostat.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_event/example_volterralotka_event.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_odes/example_bonhoeffer_vanderpol.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_odes/example_brusselator.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_odes/example_chemical.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_odes/example_duffing.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_odes/example_fairen_velarde.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_odes/example_fitzhughnagumo.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_odes/example_flame.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_odes/example_glycolysis.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_odes/example_lorenz.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_odes/example_morse.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_odes/example_robertson.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_odes/example_roessler.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_odes/example_thomas_cyclic.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_odes/example_vanderpol.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/examples/examples_odes/example_volterralotka.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/git +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/pyproject.toml +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/setup.cfg +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/__init__.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/_constants.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/README.md +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/__init__.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/_block.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/adder.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/amplifier.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/bvp.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/comparator.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/constraint.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/converters.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/counter.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/ctrl.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/delay.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/differentiator.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/discrete.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/divider.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/dynsys.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/filters.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/fmu.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/function.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/integrator.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/kalman.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/logic.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/lti.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/math.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/multiplier.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/noise.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/ode.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/relay.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/rf.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/rng.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/scope.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/sources.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/spectrum.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/switch.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/table.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/blocks/wrapper.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/connection.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/events/__init__.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/events/_event.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/events/condition.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/events/schedule.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/events/zerocrossing.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/exceptions.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/optim/__init__.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/optim/anderson.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/optim/booster.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/optim/linearization.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/optim/newton.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/optim/numerical.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/optim/operator.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/simulation.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/README.md +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/__init__.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/_rungekutta.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/_solver.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/bdf.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/dirk2.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/dirk3.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/esdirk32.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/esdirk4.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/esdirk43.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/esdirk54.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/esdirk85.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/euler.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/gear.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/rk4.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/rkbs32.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/rkck54.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/rkdp54.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/rkdp87.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/rkf21.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/rkf45.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/rkf78.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/rkv65.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/ssprk22.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/ssprk33.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/ssprk34.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/solvers/steadystate.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/subsystem.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/utils/__init__.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/utils/adaptivebuffer.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/utils/analysis.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/utils/deprecation.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/utils/diagnostics.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/utils/fmuwrapper.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/utils/gilbert.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/utils/logger.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/utils/mutable.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/utils/portreference.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/utils/progresstracker.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/utils/realtimeplotter.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim/utils/register.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim.egg-info/SOURCES.txt +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim.egg-info/dependency_links.txt +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim.egg-info/requires.txt +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim.egg-info/scm_file_list.json +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/src/pathsim.egg-info/top_level.txt +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/README.md +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/__init__.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/CoupledClutches_CS.fmu +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/__init__.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/conftest.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_algebraic_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_bouncingball_friction_event_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_bouncingball_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_brusselator_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_cosim_fmu_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_counter_comparator_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_dynamical_system_ivp.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_fitzhughnagumo_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_harmonic_oscillator_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_linear_feedback_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_logic_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_lorenz_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_me_analytical.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_model_exchange_fmu_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_pid_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_relay_thermostat_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_rescale_delay_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_robertson_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_roessler_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_signal_processing_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_steadystate_transient_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_switch_lti_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_vanderpol_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/evals/test_volterralotka_system.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/__init__.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/__init__.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/_embedding.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/rf/__init__.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/rf/ring_slot.s2p +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/rf/ring_slot_meas.s1p +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/rf/test_rf.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_adder.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_amplifier.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_block.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_bvp.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_comparator.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_constraint.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_converters.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_counter.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_ctrl.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_delay.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_differentiator.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_discrete.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_divider.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_dynsys.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_filters.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_fmu.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_function.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_integrator.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_kalman.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_logic.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_lti.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_math.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_multiplier.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_noise.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_ode.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_relay.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_rng.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_scope.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_sources.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_spectrum.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_switch.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_table.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/blocks/test_wrapper.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/events/__init__.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/events/test_condition.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/events/test_event.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/events/test_schedule.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/events/test_zerocrossing.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/optim/__init__.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/optim/test_anderson.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/optim/test_linearization.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/optim/test_newton.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/optim/test_numerical.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/optim/test_operator.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/__init__.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/_referenceproblems.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_bdf.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_dirk2.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_dirk3.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_esdirk32.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_esdirk4.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_esdirk43.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_esdirk54.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_esdirk85.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_euler.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_gear.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_rfk21.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_rk4.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_rkbs32.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_rkck54.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_rkdp54.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_rkdp87.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_rkf45.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_rkf78.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_rkv65.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_solver.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_ssprk22.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_ssprk33.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_ssprk34.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/solvers/test_steadystate.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/test_auto_initial_step.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/test_checkpoint.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/test_connection.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/test_diagnostics.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/test_simulation_pss.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/test_subsystem.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/utils/__init__.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/utils/test_adaptivebuffer.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/utils/test_analysis.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/utils/test_fmuwrapper.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/utils/test_gilbert.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/utils/test_logger.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/utils/test_mutable.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/utils/test_portreference.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/utils/test_progresstracker.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/utils/test_realtimeplotter.py +0 -0
- {pathsim-0.26.0 → pathsim-0.27.0}/tests/pathsim/utils/test_register.py +0 -0
|
@@ -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.27.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 27, 0)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g2cbb2f919'
|
|
@@ -474,20 +474,54 @@ class MassMatrixDAE(Block):
|
|
|
474
474
|
)
|
|
475
475
|
self._x0 = x0
|
|
476
476
|
|
|
477
|
-
#partition into differential (nonzero
|
|
478
|
-
|
|
479
|
-
self._d = np.flatnonzero(
|
|
480
|
-
self._a = np.flatnonzero(~
|
|
477
|
+
#partition into differential (nonzero column) and algebraic (zero column) states
|
|
478
|
+
_nonzero_column = np.any(M != 0.0, axis=0)
|
|
479
|
+
self._d = np.flatnonzero(_nonzero_column)
|
|
480
|
+
self._a = np.flatnonzero(~_nonzero_column)
|
|
481
|
+
|
|
482
|
+
#partition into differential (nonzero row) and algebraic (zero row) equations
|
|
483
|
+
_non_zero_rows = np.any(M != 0.0, axis=1)
|
|
484
|
+
self._d_equations = np.flatnonzero(_non_zero_rows)
|
|
485
|
+
self._a_equations = np.flatnonzero(~_non_zero_rows)
|
|
481
486
|
|
|
482
487
|
#index-1 form: differential rows must not weight algebraic derivatives
|
|
483
|
-
if self._a.size and np.any(M[np.ix_(self.
|
|
488
|
+
if self._a.size and np.any(M[np.ix_(self._d_equations, self._a)] != 0.0):
|
|
484
489
|
raise ValueError(
|
|
485
490
|
"mass matrix is not in index-1 form: differential rows couple "
|
|
486
491
|
"to the derivatives of algebraic states"
|
|
487
492
|
)
|
|
488
493
|
|
|
489
|
-
#
|
|
490
|
-
|
|
494
|
+
#factorise the constant differential mass block when it is square; use
|
|
495
|
+
#the pseudoinverse for rectangular reduced systems so underdetermined
|
|
496
|
+
#differential blocks still admit a minimum-norm solution.
|
|
497
|
+
self._d_mass = M[np.ix_(self._d_equations, self._d)]
|
|
498
|
+
if self._d_mass.shape[0] == self._d_mass.shape[1]:
|
|
499
|
+
self._lu = lu_factor(self._d_mass)
|
|
500
|
+
self._solve_mass_rhs = lambda rhs: lu_solve(self._lu, rhs)
|
|
501
|
+
self._solve_mass_matrix = lambda mat: lu_solve(self._lu, mat)
|
|
502
|
+
else:
|
|
503
|
+
# Use SVD once and apply the pseudoinverse implicitly for stability
|
|
504
|
+
# and to avoid forming a dense pseudoinverse matrix.
|
|
505
|
+
U, s, Vt = np.linalg.svd(self._d_mass, full_matrices=False)
|
|
506
|
+
eps = np.finfo(float).eps
|
|
507
|
+
tol = max(self._d_mass.shape) * (s.max() if s.size else 0.0) * eps
|
|
508
|
+
s_inv = np.array([1.0/si if si > tol else 0.0 for si in s])
|
|
509
|
+
|
|
510
|
+
# store factors (optional) and set solver callables
|
|
511
|
+
self._svd_U = U
|
|
512
|
+
self._svd_s_inv = s_inv
|
|
513
|
+
self._svd_Vt = Vt
|
|
514
|
+
|
|
515
|
+
def _solve_mass_rhs(rhs):
|
|
516
|
+
# rhs can be vector or matrix; apply V * S_inv * (U.T @ rhs)
|
|
517
|
+
return (Vt.T * s_inv) @ (U.T @ rhs)
|
|
518
|
+
|
|
519
|
+
def _solve_mass_matrix(mat):
|
|
520
|
+
# mat: matrix of columns to be solved
|
|
521
|
+
return (Vt.T * s_inv) @ (U.T @ mat)
|
|
522
|
+
|
|
523
|
+
self._solve_mass_rhs = _solve_mass_rhs
|
|
524
|
+
self._solve_mass_matrix = _solve_mass_matrix
|
|
491
525
|
|
|
492
526
|
#the engine integrates only the differential states
|
|
493
527
|
self.initial_value = x0[self._d]
|
|
@@ -503,7 +537,9 @@ class MassMatrixDAE(Block):
|
|
|
503
537
|
#when 'jac' is given, otherwise the operator falls back to finite differences
|
|
504
538
|
_jac_x = None
|
|
505
539
|
if self._a.size == 0 and jac is not None:
|
|
506
|
-
_jac_x
|
|
540
|
+
def _jac_x(x, u, t):
|
|
541
|
+
J = np.atleast_2d(jac(x, u, t))[np.ix_(self._d_equations, self._d)]
|
|
542
|
+
return self._solve_mass_matrix(J)
|
|
507
543
|
self.op_dyn = DynamicOperator(func=self._rhs, jac_x=_jac_x)
|
|
508
544
|
|
|
509
545
|
#pre-size the output register to the full state
|
|
@@ -609,7 +645,7 @@ class MassMatrixDAE(Block):
|
|
|
609
645
|
xa = self._solve_xa(x_d, u, t)
|
|
610
646
|
x = np.empty(self.mass.shape[0])
|
|
611
647
|
x[self._d], x[self._a] = x_d, xa
|
|
612
|
-
return
|
|
648
|
+
return self._solve_mass_rhs(self.func(x, u, t)[self._d_equations])
|
|
613
649
|
|
|
614
650
|
|
|
615
651
|
def update(self, t):
|
|
@@ -646,7 +682,8 @@ class MassMatrixDAE(Block):
|
|
|
646
682
|
|
|
647
683
|
#commit the warm-start at the current state, then linearize around it
|
|
648
684
|
self._xa = self._solve_xa(x_d, u, t)
|
|
649
|
-
f =
|
|
685
|
+
f = self._solve_mass_rhs(self.func(self._full(x_d), u, t)[self._d_equations])
|
|
686
|
+
|
|
650
687
|
J = self.op_dyn.jac_x(x_d, u, t)
|
|
651
688
|
|
|
652
689
|
return self.engine.solve(f, J, dt)
|
|
@@ -673,7 +710,7 @@ class MassMatrixDAE(Block):
|
|
|
673
710
|
"""
|
|
674
711
|
x_d, u = self.engine.state, self.inputs.to_array()
|
|
675
712
|
self._xa = self._solve_xa(x_d, u, t)
|
|
676
|
-
f =
|
|
713
|
+
f = self._solve_mass_rhs(self.func(self._full(x_d), u, t)[self._d_equations])
|
|
677
714
|
return self.engine.step(f, dt)
|
|
678
715
|
|
|
679
716
|
|
|
@@ -331,19 +331,22 @@ class Graph:
|
|
|
331
331
|
"""Optimized loop processing with minimal overhead.
|
|
332
332
|
|
|
333
333
|
Finds strongly connected components (SCCs) within the loop blocks, determines
|
|
334
|
-
entry points for each SCC, and performs BFS to assign local depths.
|
|
334
|
+
entry points for each SCC, and performs BFS to assign local depths. Includes
|
|
335
|
+
acyclic descendants in dependency order alongside cycles. Identifies
|
|
335
336
|
loop-closing connections (back edges) that need special handling.
|
|
336
337
|
|
|
337
338
|
Parameters
|
|
338
339
|
----------
|
|
339
340
|
blocks_loop : set
|
|
340
|
-
set of blocks that are part of algebraic loops
|
|
341
|
+
set of blocks that are part of or depend on algebraic loops
|
|
341
342
|
"""
|
|
342
343
|
if not blocks_loop:
|
|
343
344
|
return
|
|
344
345
|
|
|
345
|
-
#
|
|
346
|
-
|
|
346
|
+
# Tarjan emits downstream components before their upstream dependencies.
|
|
347
|
+
# Reverse that order so each component receives updated upstream outputs
|
|
348
|
+
# before it is evaluated in the same loop-solver iteration.
|
|
349
|
+
sccs = reversed(self._find_strongly_connected_components(blocks_loop))
|
|
347
350
|
|
|
348
351
|
current_depth = 0
|
|
349
352
|
|
|
@@ -433,7 +436,7 @@ class Graph:
|
|
|
433
436
|
def _find_strongly_connected_components(self, blocks):
|
|
434
437
|
"""Iterative Tarjan's algorithm using cleaner state machine.
|
|
435
438
|
|
|
436
|
-
Finds strongly connected components
|
|
439
|
+
Finds all strongly connected components within the given blocks using
|
|
437
440
|
an iterative implementation of Tarjan's algorithm. Avoids recursion limits
|
|
438
441
|
that can occur with deep graphs.
|
|
439
442
|
|
|
@@ -445,7 +448,7 @@ class Graph:
|
|
|
445
448
|
Returns
|
|
446
449
|
-------
|
|
447
450
|
list
|
|
448
|
-
list of SCCs
|
|
451
|
+
list of SCCs in reverse topological order, including acyclic singletons
|
|
449
452
|
"""
|
|
450
453
|
if not blocks:
|
|
451
454
|
return []
|
|
@@ -508,11 +511,12 @@ class Graph:
|
|
|
508
511
|
if w == node:
|
|
509
512
|
break
|
|
510
513
|
|
|
511
|
-
#
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
514
|
+
# A block downstream of a loop can form a singleton SCC
|
|
515
|
+
# without being part of a cycle. Its loop dependency keeps
|
|
516
|
+
# it out of the ordinary DAG schedule, so discarding it here
|
|
517
|
+
# would leave it unevaluated. Keep it in the loop schedule;
|
|
518
|
+
# only actual cycle-closing connections receive acceleration.
|
|
519
|
+
result.append(scc)
|
|
516
520
|
|
|
517
521
|
# Update parent's lowlink if there is a parent
|
|
518
522
|
if work_stack:
|
|
@@ -272,9 +272,6 @@ class TestMassMatrixDAE(unittest.TestCase):
|
|
|
272
272
|
MassMatrixDAE(func, np.ones((2, 3)), initial_value=[0.0, 0.0])
|
|
273
273
|
with self.assertRaises(ValueError):
|
|
274
274
|
MassMatrixDAE(func, np.eye(2), initial_value=[0.0])
|
|
275
|
-
M_bad = np.array([[1.0, 1.0], [0.0, 0.0]])
|
|
276
|
-
with self.assertRaises(ValueError):
|
|
277
|
-
MassMatrixDAE(func, M_bad, initial_value=[0.0, 0.0])
|
|
278
275
|
|
|
279
276
|
def test_passthrough(self):
|
|
280
277
|
dae_ns = MassMatrixDAE(lambda x, u, t: -x, np.eye(2), [1.0, 1.0])
|
|
@@ -293,6 +290,7 @@ class TestMassMatrixDAE(unittest.TestCase):
|
|
|
293
290
|
dae.reset()
|
|
294
291
|
np.testing.assert_array_equal(dae._xa, dae._x0[dae._a])
|
|
295
292
|
|
|
293
|
+
|
|
296
294
|
def test_info(self):
|
|
297
295
|
info = MassMatrixDAE.info()
|
|
298
296
|
self.assertEqual(info["type"], "MassMatrixDAE")
|
|
@@ -348,6 +346,21 @@ class TestMassMatrixDAE(unittest.TestCase):
|
|
|
348
346
|
sim.run(1.0)
|
|
349
347
|
self.assertAlmostEqual(float(dae.engine.state[0]), np.exp(-0.5), places=4)
|
|
350
348
|
|
|
349
|
+
def test_nonsymmetric_singular(self):
|
|
350
|
+
from pathsim import Simulation, Connection
|
|
351
|
+
from pathsim.blocks import Constant, Scope
|
|
352
|
+
M = np.array([[1.0, 1.0], [0.0, 0.0]])
|
|
353
|
+
func = lambda x, u, t: np.array([1., x[0] - x[1]])
|
|
354
|
+
dae = MassMatrixDAE(func, M, initial_value=[0.0, 0.0])
|
|
355
|
+
sco = Scope()
|
|
356
|
+
sim = Simulation(
|
|
357
|
+
blocks=[dae, sco],
|
|
358
|
+
connections=[Connection(dae[0], sco[0])],
|
|
359
|
+
dt=0.01, Solver=ESDIRK43, log=False
|
|
360
|
+
)
|
|
361
|
+
sim.run(1.0)
|
|
362
|
+
np.testing.assert_allclose(dae.outputs.to_array(), [0.5, 0.5], atol=1e-3)
|
|
363
|
+
|
|
351
364
|
def test_simulation_singular_with_input(self):
|
|
352
365
|
#x0' = -x0 + x1, 0 = x0 + x1 - u => steady state x -> u/2
|
|
353
366
|
from pathsim import Simulation, Connection
|
|
@@ -51,6 +51,78 @@ class TestSimulation(unittest.TestCase):
|
|
|
51
51
|
only very minimal functonality
|
|
52
52
|
"""
|
|
53
53
|
|
|
54
|
+
def test_algebraic_loop_downstream_chain(self):
|
|
55
|
+
"""Evaluate acyclic descendants of a converged algebraic loop."""
|
|
56
|
+
a = Function(lambda b: 0.5 * b + 1)
|
|
57
|
+
b = Function(lambda a: 0.5 * a)
|
|
58
|
+
c = Function(lambda a: a + 10)
|
|
59
|
+
d = Function(lambda c: 2 * c)
|
|
60
|
+
simulation = Simulation(
|
|
61
|
+
blocks=[d, c, b, a],
|
|
62
|
+
connections=[
|
|
63
|
+
Connection(a, b), Connection(b, a),
|
|
64
|
+
Connection(a, c), Connection(c, d),
|
|
65
|
+
],
|
|
66
|
+
log=False,
|
|
67
|
+
)
|
|
68
|
+
simulation.run(0.01)
|
|
69
|
+
|
|
70
|
+
self.assertAlmostEqual(a.outputs[0], 4 / 3)
|
|
71
|
+
self.assertAlmostEqual(b.outputs[0], 2 / 3)
|
|
72
|
+
self.assertAlmostEqual(c.outputs[0], 4 / 3 + 10)
|
|
73
|
+
self.assertAlmostEqual(d.outputs[0], 2 * (4 / 3 + 10))
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def test_algebraic_loop_downstream_merge(self):
|
|
77
|
+
"""Propagate both branches before evaluating their merged output."""
|
|
78
|
+
a = Function(lambda a: 0.5 * a + 1)
|
|
79
|
+
short = Function(lambda a: a + 10)
|
|
80
|
+
long = Function(lambda a: 3 * a)
|
|
81
|
+
end = Function(lambda value: value + 20)
|
|
82
|
+
merge = Adder()
|
|
83
|
+
simulation = Simulation(
|
|
84
|
+
blocks=[merge, end, long, short, a],
|
|
85
|
+
connections=[
|
|
86
|
+
Connection(a, a), Connection(a, short), Connection(a, long),
|
|
87
|
+
Connection(long, end),
|
|
88
|
+
Connection(short, merge[0]), Connection(end, merge[1]),
|
|
89
|
+
],
|
|
90
|
+
log=False,
|
|
91
|
+
)
|
|
92
|
+
simulation.run(0.01)
|
|
93
|
+
|
|
94
|
+
self.assertAlmostEqual(a.outputs[0], 2)
|
|
95
|
+
self.assertAlmostEqual(short.outputs[0], 12)
|
|
96
|
+
self.assertAlmostEqual(end.outputs[0], 26)
|
|
97
|
+
self.assertAlmostEqual(merge.outputs[0], 38)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def test_connected_algebraic_loops_with_downstream_blocks(self):
|
|
101
|
+
"""Evaluate a second feedback loop after its upstream loop and bridge."""
|
|
102
|
+
a = Function(lambda b: 0.5 * b + 1)
|
|
103
|
+
b = Function(lambda a: 0.5 * a)
|
|
104
|
+
bridge = Function(lambda a: a)
|
|
105
|
+
c = Function(lambda upstream, d: upstream + 0.5 * d)
|
|
106
|
+
d = Function(lambda c: 0.5 * c)
|
|
107
|
+
tail = Function(lambda c: c + 10)
|
|
108
|
+
simulation = Simulation(
|
|
109
|
+
blocks=[tail, d, c, bridge, b, a],
|
|
110
|
+
connections=[
|
|
111
|
+
Connection(a, b), Connection(b, a), Connection(a, bridge),
|
|
112
|
+
Connection(bridge, c[0]), Connection(c, d), Connection(d, c[1]),
|
|
113
|
+
Connection(c, tail),
|
|
114
|
+
],
|
|
115
|
+
log=False,
|
|
116
|
+
)
|
|
117
|
+
simulation.run(0.01)
|
|
118
|
+
|
|
119
|
+
self.assertAlmostEqual(a.outputs[0], 4 / 3)
|
|
120
|
+
self.assertAlmostEqual(bridge.outputs[0], 4 / 3)
|
|
121
|
+
self.assertAlmostEqual(c.outputs[0], 16 / 9)
|
|
122
|
+
self.assertAlmostEqual(d.outputs[0], 8 / 9)
|
|
123
|
+
self.assertAlmostEqual(tail.outputs[0], 16 / 9 + 10)
|
|
124
|
+
|
|
125
|
+
|
|
54
126
|
def test_init_default(self):
|
|
55
127
|
|
|
56
128
|
#test default initialization
|
|
@@ -478,6 +478,73 @@ class TestGraph(unittest.TestCase):
|
|
|
478
478
|
self.assertEqual(len(g), 4)
|
|
479
479
|
|
|
480
480
|
|
|
481
|
+
def test_loop_downstream_chain(self):
|
|
482
|
+
"""Schedule every loop-dependent block after its upstream component."""
|
|
483
|
+
a, b, c, d = [Amplifier(0.5) for _ in range(4)]
|
|
484
|
+
connections = [
|
|
485
|
+
Connection(a, b), Connection(b, a),
|
|
486
|
+
Connection(a, c), Connection(c, d),
|
|
487
|
+
]
|
|
488
|
+
graph = Graph([d, c, b, a], connections)
|
|
489
|
+
levels = {block: depth for depth, blocks, _ in graph.loop() for block in blocks}
|
|
490
|
+
|
|
491
|
+
self.assertEqual(set(levels), {a, b, c, d})
|
|
492
|
+
self.assertGreater(levels[c], max(levels[a], levels[b]))
|
|
493
|
+
self.assertGreater(levels[d], levels[c])
|
|
494
|
+
self.assertEqual(len(graph.loop_closing_connections()), 1)
|
|
495
|
+
|
|
496
|
+
|
|
497
|
+
def test_loop_downstream_merge(self):
|
|
498
|
+
"""Merged branches wait for both of their loop-dependent inputs."""
|
|
499
|
+
a, b, c, d, e = [Amplifier(0.5) for _ in range(5)]
|
|
500
|
+
merge = Adder()
|
|
501
|
+
connections = [
|
|
502
|
+
Connection(a, b), Connection(b, a),
|
|
503
|
+
Connection(a, c), Connection(a, d), Connection(d, e),
|
|
504
|
+
Connection(c, merge[0]), Connection(e, merge[1]),
|
|
505
|
+
]
|
|
506
|
+
blocks = [merge, e, d, c, b, a]
|
|
507
|
+
graph = Graph(blocks, connections)
|
|
508
|
+
levels = {block: depth for depth, nodes, _ in graph.loop() for block in nodes}
|
|
509
|
+
|
|
510
|
+
self.assertEqual(set(levels), set(blocks))
|
|
511
|
+
self.assertGreater(levels[merge], max(levels[c], levels[e]))
|
|
512
|
+
self.assertGreater(levels[e], levels[d])
|
|
513
|
+
self.assertEqual(len(graph.loop_closing_connections()), 1)
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
def test_connected_loops_with_downstream_blocks(self):
|
|
517
|
+
"""Order connected cycles and the acyclic blocks between them."""
|
|
518
|
+
a, b, bridge, c, d, tail = [Adder() for _ in range(6)]
|
|
519
|
+
connections = [
|
|
520
|
+
Connection(a, b), Connection(b, a), Connection(a, bridge),
|
|
521
|
+
Connection(bridge, c[0]), Connection(c, d), Connection(d, c[1]),
|
|
522
|
+
Connection(c, tail),
|
|
523
|
+
]
|
|
524
|
+
blocks = [tail, d, c, bridge, b, a]
|
|
525
|
+
graph = Graph(blocks, connections)
|
|
526
|
+
levels = {block: depth for depth, nodes, _ in graph.loop() for block in nodes}
|
|
527
|
+
|
|
528
|
+
self.assertEqual(set(levels), set(blocks))
|
|
529
|
+
self.assertGreater(levels[bridge], max(levels[a], levels[b]))
|
|
530
|
+
self.assertGreater(min(levels[c], levels[d]), levels[bridge])
|
|
531
|
+
self.assertGreater(levels[tail], max(levels[c], levels[d]))
|
|
532
|
+
self.assertEqual(len(graph.loop_closing_connections()), 2)
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
def test_self_loop_with_downstream_block(self):
|
|
536
|
+
"""Keep a self-loop's accelerator without treating its tail as a cycle."""
|
|
537
|
+
a, tail = Amplifier(0.5), Amplifier(2)
|
|
538
|
+
feedback = Connection(a, a)
|
|
539
|
+
downstream = Connection(a, tail)
|
|
540
|
+
graph = Graph([tail, a], [feedback, downstream])
|
|
541
|
+
levels = {block: depth for depth, nodes, _ in graph.loop() for block in nodes}
|
|
542
|
+
|
|
543
|
+
self.assertEqual(set(levels), {a, tail})
|
|
544
|
+
self.assertGreater(levels[tail], levels[a])
|
|
545
|
+
self.assertEqual(graph.loop_closing_connections(), [feedback])
|
|
546
|
+
|
|
547
|
+
|
|
481
548
|
def test_dag_empty_when_only_loops(self):
|
|
482
549
|
"""Test that DAG is empty when graph only contains loops."""
|
|
483
550
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/billard_circle_g.png
RENAMED
|
File without changes
|
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/bouncing_ball_both_g.png
RENAMED
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/bouncing_ball_g.png
RENAMED
|
File without changes
|
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/bouncing_ball_result_g.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/cascade_blockdiagram_g.png
RENAMED
|
File without changes
|
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/coupled_oscillators_g.png
RENAMED
|
File without changes
|
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/diode_blockdiagram_g.png
RENAMED
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/elastic_pendulum_g.png
RENAMED
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/fmcw_blockdiagram_g.png
RENAMED
|
File without changes
|
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/harmonic_oscillator_g.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/ode_blockdiagram_g.png
RENAMED
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/pendulum_blockdiagram_g.png
RENAMED
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/pid_blockdiagram_g.png
RENAMED
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/sar_adc_blockdiagram_g.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/figures_g/vanderpol_result_g.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/stick_slip_blockdiagram_slip.png
RENAMED
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/figures/stick_slip_blockdiagram_stick.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pathsim-0.26.0 → pathsim-0.27.0}/docs/source/examples/fmu_model_exchange_bouncing_ball.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|