pySimBlocks 0.1.0__py3-none-any.whl
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.
- examples/advanced/hardware/block_diagram.py +162 -0
- examples/advanced/hardware/camera.py +93 -0
- examples/advanced/hardware/gui_emio.py +231 -0
- examples/advanced/hardware/lmi.py +69 -0
- examples/advanced/hardware/main.py +57 -0
- examples/advanced/hardware/parameters.py +54 -0
- examples/advanced/qp_problem/params.py +10 -0
- examples/advanced/qp_problem/run.py +14 -0
- examples/advanced/sofa/gui/finger/Finger.py +108 -0
- examples/advanced/sofa/gui/finger/FingerController.py +53 -0
- examples/advanced/sofa/gui/finger/parameters_auto.py +22 -0
- examples/advanced/sofa/gui/sofa_plant/run.py +14 -0
- examples/advanced/sofa/python/Finger.py +107 -0
- examples/advanced/sofa/python/FingerController.py +48 -0
- examples/advanced/sofa/python/closedloop.py +64 -0
- examples/advanced/sofa/python/openloop.py +58 -0
- examples/basics/algebraic_function/g.py +7 -0
- examples/basics/algebraic_function/run.py +14 -0
- examples/basics/dc_motor/gui/run.py +14 -0
- examples/basics/dc_motor/multiple_order.py +91 -0
- examples/basics/dc_motor/openloop.py +62 -0
- examples/basics/dc_motor/pi.py +99 -0
- examples/basics/dc_motor/pid.py +118 -0
- examples/basics/dc_motor/pid_block.py +82 -0
- examples/basics/dc_motor/pid_block_vs_manual.py +143 -0
- examples/basics/external/parameters.py +4 -0
- examples/basics/external/run.py +14 -0
- examples/basics/file_sources/temp.py +16 -0
- examples/basics/observer.py +76 -0
- examples/basics/state_feedback/gui/parameters.py +9 -0
- examples/basics/state_feedback/gui/run.py +14 -0
- examples/basics/state_feedback/state_feedback.py +102 -0
- examples/basics/state_space/linear/gui/run.py +14 -0
- examples/basics/state_space/linear/ss_block.py +89 -0
- examples/basics/state_space/linear/ss_manual.py +105 -0
- examples/basics/state_space/non_linear/nlss.py +47 -0
- examples/basics/state_space/non_linear/run.py +14 -0
- examples/basics/state_space/polytope/params.py +39 -0
- examples/basics/state_space/polytope/weights.py +12 -0
- examples/comparison/simulink/convert.py +29 -0
- examples/comparison/simulink/openloop.py +127 -0
- examples/comparison/simulink/pi.py +148 -0
- examples/comparison/simulink/pid.py +154 -0
- examples/comparison/simulink/pid_backward.py +155 -0
- examples/quick_start/filter.py +35 -0
- examples/quick_start/gui/run.py +14 -0
- examples/tutorials/tutorial_1_python/main.py +99 -0
- examples/tutorials/tutorial_3_sofa/finger/Finger.py +120 -0
- examples/tutorials/tutorial_3_sofa/finger/FingerController.py +37 -0
- pySimBlocks/__init__.py +35 -0
- pySimBlocks/blocks/__init__.py +68 -0
- pySimBlocks/blocks/controllers/__init__.py +27 -0
- pySimBlocks/blocks/controllers/pid.py +250 -0
- pySimBlocks/blocks/controllers/state_feedback.py +141 -0
- pySimBlocks/blocks/interfaces/__init__.py +27 -0
- pySimBlocks/blocks/interfaces/external_input.py +107 -0
- pySimBlocks/blocks/interfaces/external_output.py +113 -0
- pySimBlocks/blocks/observers/__init__.py +23 -0
- pySimBlocks/blocks/observers/luenberger.py +175 -0
- pySimBlocks/blocks/operators/__init__.py +47 -0
- pySimBlocks/blocks/operators/algebraic_function.py +258 -0
- pySimBlocks/blocks/operators/dead_zone.py +186 -0
- pySimBlocks/blocks/operators/delay.py +254 -0
- pySimBlocks/blocks/operators/demux.py +123 -0
- pySimBlocks/blocks/operators/discrete_derivator.py +237 -0
- pySimBlocks/blocks/operators/discrete_integrator.py +265 -0
- pySimBlocks/blocks/operators/gain.py +294 -0
- pySimBlocks/blocks/operators/mux.py +131 -0
- pySimBlocks/blocks/operators/product.py +194 -0
- pySimBlocks/blocks/operators/rate_limiter.py +214 -0
- pySimBlocks/blocks/operators/saturation.py +178 -0
- pySimBlocks/blocks/operators/sum.py +188 -0
- pySimBlocks/blocks/operators/zero_order_hold.py +141 -0
- pySimBlocks/blocks/optimizers/__init__.py +23 -0
- pySimBlocks/blocks/optimizers/quadratic_program.py +326 -0
- pySimBlocks/blocks/sources/__init__.py +37 -0
- pySimBlocks/blocks/sources/chirp.py +168 -0
- pySimBlocks/blocks/sources/constant.py +82 -0
- pySimBlocks/blocks/sources/file_source.py +294 -0
- pySimBlocks/blocks/sources/function_source.py +197 -0
- pySimBlocks/blocks/sources/ramp.py +99 -0
- pySimBlocks/blocks/sources/sinusoidal.py +113 -0
- pySimBlocks/blocks/sources/step.py +138 -0
- pySimBlocks/blocks/sources/white_noise.py +107 -0
- pySimBlocks/blocks/systems/__init__.py +27 -0
- pySimBlocks/blocks/systems/linear_state_space.py +180 -0
- pySimBlocks/blocks/systems/non_linear_state_space.py +309 -0
- pySimBlocks/blocks/systems/polytopic_state_space.py +193 -0
- pySimBlocks/blocks/systems/sofa/__init__.py +30 -0
- pySimBlocks/blocks/systems/sofa/sofa_controller.py +472 -0
- pySimBlocks/blocks/systems/sofa/sofa_exchange_i_o.py +120 -0
- pySimBlocks/blocks/systems/sofa/sofa_plant.py +306 -0
- pySimBlocks/cli.py +127 -0
- pySimBlocks/core/__init__.py +32 -0
- pySimBlocks/core/block.py +167 -0
- pySimBlocks/core/block_source.py +94 -0
- pySimBlocks/core/config.py +90 -0
- pySimBlocks/core/fixed_time_manager.py +46 -0
- pySimBlocks/core/model.py +250 -0
- pySimBlocks/core/scheduler.py +30 -0
- pySimBlocks/core/simulator.py +329 -0
- pySimBlocks/core/task.py +73 -0
- pySimBlocks/docs/blocks/controllers/pid.md +78 -0
- pySimBlocks/docs/blocks/controllers/state_feedback.md +60 -0
- pySimBlocks/docs/blocks/interfaces/external_input.md +39 -0
- pySimBlocks/docs/blocks/interfaces/external_output.md +39 -0
- pySimBlocks/docs/blocks/observers/luenberger.md +70 -0
- pySimBlocks/docs/blocks/operators/algebraic_function.md +76 -0
- pySimBlocks/docs/blocks/operators/dead_zone.md +67 -0
- pySimBlocks/docs/blocks/operators/delay.md +76 -0
- pySimBlocks/docs/blocks/operators/demux.md +64 -0
- pySimBlocks/docs/blocks/operators/discrete_derivator.md +61 -0
- pySimBlocks/docs/blocks/operators/discrete_integrator.md +87 -0
- pySimBlocks/docs/blocks/operators/gain.md +97 -0
- pySimBlocks/docs/blocks/operators/mux.md +64 -0
- pySimBlocks/docs/blocks/operators/product.md +51 -0
- pySimBlocks/docs/blocks/operators/rate_limiter.md +70 -0
- pySimBlocks/docs/blocks/operators/saturation.md +62 -0
- pySimBlocks/docs/blocks/operators/sum.md +49 -0
- pySimBlocks/docs/blocks/operators/zero_order_hold.md +61 -0
- pySimBlocks/docs/blocks/optimizers/quadratic_program.md +98 -0
- pySimBlocks/docs/blocks/sources/chirp.md +102 -0
- pySimBlocks/docs/blocks/sources/constant.md +53 -0
- pySimBlocks/docs/blocks/sources/file_source.md +51 -0
- pySimBlocks/docs/blocks/sources/function_source.md +52 -0
- pySimBlocks/docs/blocks/sources/ramp.md +58 -0
- pySimBlocks/docs/blocks/sources/sinusoidal.md +60 -0
- pySimBlocks/docs/blocks/sources/step.md +63 -0
- pySimBlocks/docs/blocks/sources/white_noise.md +58 -0
- pySimBlocks/docs/blocks/systems/linear_state_space.md +66 -0
- pySimBlocks/docs/blocks/systems/non_linear_state_space.md +90 -0
- pySimBlocks/docs/blocks/systems/polytopic_state_space.md +72 -0
- pySimBlocks/docs/blocks/systems/sofa/sofa_exchange_i_o.md +63 -0
- pySimBlocks/docs/blocks/systems/sofa/sofa_plant.md +62 -0
- pySimBlocks/gui/__init__.py +20 -0
- pySimBlocks/gui/addons/__init__.py +19 -0
- pySimBlocks/gui/addons/sofa/__init__.py +19 -0
- pySimBlocks/gui/addons/sofa/sofa_dialog.py +190 -0
- pySimBlocks/gui/addons/sofa/sofa_service.py +209 -0
- pySimBlocks/gui/blocks/block_dialog_session.py +47 -0
- pySimBlocks/gui/blocks/block_meta.py +408 -0
- pySimBlocks/gui/blocks/controllers/pid.py +116 -0
- pySimBlocks/gui/blocks/controllers/state_feedback.py +80 -0
- pySimBlocks/gui/blocks/interfaces/external_input.py +64 -0
- pySimBlocks/gui/blocks/interfaces/external_output.py +63 -0
- pySimBlocks/gui/blocks/observers/luenberger.py +108 -0
- pySimBlocks/gui/blocks/operators/algebraic_function.py +232 -0
- pySimBlocks/gui/blocks/operators/dead_zone.py +79 -0
- pySimBlocks/gui/blocks/operators/delay.py +79 -0
- pySimBlocks/gui/blocks/operators/demux.py +98 -0
- pySimBlocks/gui/blocks/operators/discrete_derivator.py +67 -0
- pySimBlocks/gui/blocks/operators/discrete_integrator.py +80 -0
- pySimBlocks/gui/blocks/operators/gain.py +79 -0
- pySimBlocks/gui/blocks/operators/mux.py +100 -0
- pySimBlocks/gui/blocks/operators/product.py +109 -0
- pySimBlocks/gui/blocks/operators/rate_limiter.py +79 -0
- pySimBlocks/gui/blocks/operators/saturation.py +72 -0
- pySimBlocks/gui/blocks/operators/sum.py +91 -0
- pySimBlocks/gui/blocks/operators/zero_order_hold.py +64 -0
- pySimBlocks/gui/blocks/optimizers/quadratic_program.py +128 -0
- pySimBlocks/gui/blocks/parameter_meta.py +34 -0
- pySimBlocks/gui/blocks/port_meta.py +31 -0
- pySimBlocks/gui/blocks/sources/chirp.py +146 -0
- pySimBlocks/gui/blocks/sources/constant.py +63 -0
- pySimBlocks/gui/blocks/sources/file_source.py +196 -0
- pySimBlocks/gui/blocks/sources/function_source.py +202 -0
- pySimBlocks/gui/blocks/sources/ramp.py +73 -0
- pySimBlocks/gui/blocks/sources/sinusoidal.py +81 -0
- pySimBlocks/gui/blocks/sources/step.py +83 -0
- pySimBlocks/gui/blocks/sources/white_noise.py +70 -0
- pySimBlocks/gui/blocks/systems/linear_state_space.py +102 -0
- pySimBlocks/gui/blocks/systems/non_linear_state_space.py +233 -0
- pySimBlocks/gui/blocks/systems/polytopic_state_space.py +109 -0
- pySimBlocks/gui/blocks/systems/sofa/sofa_exchange_i_o.py +221 -0
- pySimBlocks/gui/blocks/systems/sofa/sofa_plant.py +220 -0
- pySimBlocks/gui/dialogs/__init__.py +19 -0
- pySimBlocks/gui/dialogs/block_dialog.py +125 -0
- pySimBlocks/gui/dialogs/display_yaml_dialog.py +89 -0
- pySimBlocks/gui/dialogs/help_dialog.py +39 -0
- pySimBlocks/gui/dialogs/plot_dialog.py +230 -0
- pySimBlocks/gui/dialogs/settings/plots.py +187 -0
- pySimBlocks/gui/dialogs/settings/project.py +146 -0
- pySimBlocks/gui/dialogs/settings/simulation.py +137 -0
- pySimBlocks/gui/dialogs/settings_dialog.py +88 -0
- pySimBlocks/gui/dialogs/unsaved_dialog.py +92 -0
- pySimBlocks/gui/editor.py +49 -0
- pySimBlocks/gui/graphics/__init__.py +29 -0
- pySimBlocks/gui/graphics/block_item.py +289 -0
- pySimBlocks/gui/graphics/connection_item.py +266 -0
- pySimBlocks/gui/graphics/port_item.py +153 -0
- pySimBlocks/gui/graphics/theme.py +119 -0
- pySimBlocks/gui/main_window.py +162 -0
- pySimBlocks/gui/models/__init__.py +31 -0
- pySimBlocks/gui/models/block_instance.py +114 -0
- pySimBlocks/gui/models/connection_instance.py +43 -0
- pySimBlocks/gui/models/port_instance.py +52 -0
- pySimBlocks/gui/models/project_simulation_params.py +50 -0
- pySimBlocks/gui/models/project_state.py +114 -0
- pySimBlocks/gui/project_controller.py +302 -0
- pySimBlocks/gui/services/__init__.py +20 -0
- pySimBlocks/gui/services/project_loader.py +381 -0
- pySimBlocks/gui/services/project_saver.py +68 -0
- pySimBlocks/gui/services/simulation_runner.py +66 -0
- pySimBlocks/gui/services/yaml_tools.py +261 -0
- pySimBlocks/gui/widgets/__init__.py +19 -0
- pySimBlocks/gui/widgets/block_list.py +131 -0
- pySimBlocks/gui/widgets/diagram_view.py +312 -0
- pySimBlocks/gui/widgets/toolbar_view.py +161 -0
- pySimBlocks/project/__init__.py +35 -0
- pySimBlocks/project/build_model.py +92 -0
- pySimBlocks/project/generate_run_script.py +109 -0
- pySimBlocks/project/generate_sofa_controller.py +215 -0
- pySimBlocks/project/load_project_config.py +197 -0
- pySimBlocks/project/load_simulation_config.py +166 -0
- pySimBlocks/project/load_simulator.py +45 -0
- pySimBlocks/project/plot_from_config.py +174 -0
- pySimBlocks/project/pySimBlocks_blocks_index.yaml +106 -0
- pySimBlocks/real_time/__init__.py +23 -0
- pySimBlocks/real_time/real_time_runner.py +148 -0
- pySimBlocks/tools/__init__.py +19 -0
- pySimBlocks/tools/blocks_registry.py +141 -0
- pySimBlocks/tools/generate_blocks_index.py +124 -0
- pysimblocks-0.1.0.dist-info/METADATA +180 -0
- pysimblocks-0.1.0.dist-info/RECORD +262 -0
- pysimblocks-0.1.0.dist-info/WHEEL +5 -0
- pysimblocks-0.1.0.dist-info/entry_points.txt +2 -0
- pysimblocks-0.1.0.dist-info/licenses/LICENSE.md +165 -0
- pysimblocks-0.1.0.dist-info/top_level.txt +3 -0
- tests/blocks/controllers/test_pid.py +143 -0
- tests/blocks/controllers/test_state_feedback.py +193 -0
- tests/blocks/observers/test_luenberger.py +225 -0
- tests/blocks/operators/test_algebraic_function.py +230 -0
- tests/blocks/operators/test_dead_zone.py +106 -0
- tests/blocks/operators/test_delay.py +167 -0
- tests/blocks/operators/test_demux.py +111 -0
- tests/blocks/operators/test_discrete_derivator.py +160 -0
- tests/blocks/operators/test_discrete_integrator.py +149 -0
- tests/blocks/operators/test_gain.py +182 -0
- tests/blocks/operators/test_mux.py +101 -0
- tests/blocks/operators/test_product.py +171 -0
- tests/blocks/operators/test_rate_limiter.py +166 -0
- tests/blocks/operators/test_saturation.py +157 -0
- tests/blocks/operators/test_sum.py +183 -0
- tests/blocks/operators/test_zero_order_hold.py +106 -0
- tests/blocks/sources/test_chirp.py +157 -0
- tests/blocks/sources/test_constant.py +55 -0
- tests/blocks/sources/test_file_source.py +185 -0
- tests/blocks/sources/test_function_source.py +135 -0
- tests/blocks/sources/test_ramp.py +110 -0
- tests/blocks/sources/test_sinusoidal.py +113 -0
- tests/blocks/sources/test_step.py +76 -0
- tests/blocks/sources/test_white_noise.py +108 -0
- tests/blocks/systems/test_linear_state_space.py +135 -0
- tests/blocks/systems/test_polytopic_state_space.py +133 -0
- tests/core/test_core_errors_and_determinism.py +82 -0
- tests/core/test_core_multirate_tasks.py +88 -0
- tests/core/test_core_two_phase_and_propagation.py +132 -0
- tests/gui/main_window_open_test.py +162 -0
- tests/gui/test_block_meta_param_cache.py +16 -0
- tests/gui/test_file_source_meta.py +17 -0
- tests/gui/test_function_source_meta.py +28 -0
- tests/regression/test_simulink_dc_motor.py +217 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# ******************************************************************************
|
|
2
|
+
# pySimBlocks
|
|
3
|
+
# Copyright (c) 2026 Université de Lille & INRIA
|
|
4
|
+
# ******************************************************************************
|
|
5
|
+
# This program is free software: you can redistribute it and/or modify it
|
|
6
|
+
# under the terms of the GNU Lesser General Public License as published by
|
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or (at your
|
|
8
|
+
# option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
11
|
+
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
12
|
+
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
|
13
|
+
# for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
# ******************************************************************************
|
|
18
|
+
# Authors: see Authors.txt
|
|
19
|
+
# ******************************************************************************
|
|
20
|
+
|
|
21
|
+
import os
|
|
22
|
+
import yaml
|
|
23
|
+
import ast
|
|
24
|
+
from pathlib import Path
|
|
25
|
+
|
|
26
|
+
def iter_python_files(base_path):
|
|
27
|
+
for root, _, files in os.walk(base_path):
|
|
28
|
+
for f in files:
|
|
29
|
+
if f.endswith(".py") and f != "__init__.py":
|
|
30
|
+
yield os.path.join(root, f)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def find_block_classes(filepath):
|
|
34
|
+
"""Find all classes inheriting directly or indirectly from 'Block'."""
|
|
35
|
+
with open(filepath, "r", encoding="utf-8") as f:
|
|
36
|
+
source = f.read()
|
|
37
|
+
|
|
38
|
+
tree = ast.parse(source)
|
|
39
|
+
|
|
40
|
+
class_parents = {}
|
|
41
|
+
|
|
42
|
+
for node in ast.walk(tree):
|
|
43
|
+
if isinstance(node, ast.ClassDef):
|
|
44
|
+
parents = []
|
|
45
|
+
for base in node.bases:
|
|
46
|
+
if isinstance(base, ast.Name):
|
|
47
|
+
parents.append(base.id)
|
|
48
|
+
elif isinstance(base, ast.Attribute):
|
|
49
|
+
parents.append(base.attr)
|
|
50
|
+
class_parents[node.name] = parents
|
|
51
|
+
|
|
52
|
+
def is_block_class(cls):
|
|
53
|
+
visited = set()
|
|
54
|
+
to_visit = [cls]
|
|
55
|
+
|
|
56
|
+
while to_visit:
|
|
57
|
+
current = to_visit.pop()
|
|
58
|
+
if current in visited:
|
|
59
|
+
continue
|
|
60
|
+
visited.add(current)
|
|
61
|
+
|
|
62
|
+
if "block" in current.lower():
|
|
63
|
+
return True
|
|
64
|
+
|
|
65
|
+
parents = class_parents.get(current, [])
|
|
66
|
+
to_visit.extend(parents)
|
|
67
|
+
|
|
68
|
+
return False
|
|
69
|
+
|
|
70
|
+
block_classes = []
|
|
71
|
+
for cls in class_parents:
|
|
72
|
+
if is_block_class(cls):
|
|
73
|
+
block_classes.append(cls)
|
|
74
|
+
|
|
75
|
+
return block_classes
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def generate_blocks_index():
|
|
79
|
+
blocks_dir = Path(__file__).resolve().parents[1] / "blocks"
|
|
80
|
+
output_path = Path(__file__).resolve().parents[1] / "project" / "pySimBlocks_blocks_index.yaml"
|
|
81
|
+
|
|
82
|
+
index = {}
|
|
83
|
+
|
|
84
|
+
for group in os.listdir(blocks_dir):
|
|
85
|
+
group_path = blocks_dir / group
|
|
86
|
+
|
|
87
|
+
if (
|
|
88
|
+
not group_path.is_dir()
|
|
89
|
+
or group.startswith("_")
|
|
90
|
+
or group.startswith(".")
|
|
91
|
+
or group == "__pycache__"
|
|
92
|
+
):
|
|
93
|
+
continue
|
|
94
|
+
|
|
95
|
+
index[group] = {}
|
|
96
|
+
|
|
97
|
+
for filepath in iter_python_files(group_path):
|
|
98
|
+
classes = find_block_classes(filepath)
|
|
99
|
+
if not classes:
|
|
100
|
+
continue
|
|
101
|
+
|
|
102
|
+
file_stem = Path(filepath).stem # snake_case name -> key in YAML
|
|
103
|
+
|
|
104
|
+
# Compute module path
|
|
105
|
+
rel_path = filepath.split("pySimBlocks")[-1].lstrip("/\\")
|
|
106
|
+
module_path = "pySimBlocks." + rel_path.replace("/", ".").replace("\\", ".").removesuffix(".py")
|
|
107
|
+
|
|
108
|
+
# Only one block class per file (pySimBlocks rule)
|
|
109
|
+
class_name = classes[0]
|
|
110
|
+
|
|
111
|
+
index[group][file_stem] = {
|
|
112
|
+
"class": class_name,
|
|
113
|
+
"module": module_path
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
with open(output_path, "w") as f:
|
|
117
|
+
yaml.dump(index, f, sort_keys=True)
|
|
118
|
+
|
|
119
|
+
print(f"[OK] Block index written to {output_path}")
|
|
120
|
+
return index
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
if __name__ == "__main__":
|
|
124
|
+
generate_blocks_index()
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pySimBlocks
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A block-diagram simulation environment with PySide6 editor
|
|
5
|
+
Author-email: Antoine Alessandrini <antoine.alessandrini@univ-lille.fr>
|
|
6
|
+
License-Expression: LGPL-3.0-or-later
|
|
7
|
+
Project-URL: Homepage, https://github.com/AlessandriniAntoine/pySimBlocks
|
|
8
|
+
Project-URL: Repository, https://github.com/AlessandriniAntoine/pySimBlocks
|
|
9
|
+
Project-URL: Issues, https://github.com/AlessandriniAntoine/pySimBlocks/issues
|
|
10
|
+
Keywords: simulation,block-diagram,control,discrete-time,pyside6
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Intended Audience :: Science/Research
|
|
13
|
+
Classifier: Intended Audience :: Education
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Topic :: Scientific/Engineering
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
20
|
+
Requires-Python: >=3.10
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE.md
|
|
23
|
+
Requires-Dist: numpy
|
|
24
|
+
Requires-Dist: matplotlib
|
|
25
|
+
Requires-Dist: pyyaml
|
|
26
|
+
Requires-Dist: PySide6
|
|
27
|
+
Requires-Dist: typing_extensions; python_version < "3.11"
|
|
28
|
+
Provides-Extra: examples
|
|
29
|
+
Requires-Dist: control; extra == "examples"
|
|
30
|
+
Requires-Dist: qpsolvers[clarabel,osqp]; extra == "examples"
|
|
31
|
+
Provides-Extra: tests
|
|
32
|
+
Requires-Dist: pytest; extra == "tests"
|
|
33
|
+
Requires-Dist: pytest-qt; extra == "tests"
|
|
34
|
+
Dynamic: license-file
|
|
35
|
+
|
|
36
|
+
# pySimBlocks
|
|
37
|
+
|
|
38
|
+
A deterministic block-diagram simulation framework for discrete-time modeling,
|
|
39
|
+
co-simulation and research prototyping in Python.
|
|
40
|
+
|
|
41
|
+
pySimBlocks allows you to build, configure, and execute discrete-time systems
|
|
42
|
+
using either:
|
|
43
|
+
|
|
44
|
+
- A pure Python API
|
|
45
|
+
- A graphical editor (PySide6)
|
|
46
|
+
- YAML project configuration
|
|
47
|
+
- Optional SOFA and hardware integration
|
|
48
|
+
|
|
49
|
+

|
|
50
|
+
|
|
51
|
+
## Features
|
|
52
|
+
|
|
53
|
+
- Block-based modeling (Simulink-like)
|
|
54
|
+
- Deterministic discrete-time simulation engine
|
|
55
|
+
- PySide6 graphical editor
|
|
56
|
+
- YAML-based project serialization
|
|
57
|
+
- Exportable Python runner (`run.py`)
|
|
58
|
+
- Extensible block architecture
|
|
59
|
+
|
|
60
|
+
## Installation
|
|
61
|
+
|
|
62
|
+
### From GitHub
|
|
63
|
+
|
|
64
|
+
Install directly from GitHub using pip:
|
|
65
|
+
```
|
|
66
|
+
pip install git+https://github.com/AlessandriniAntoine/pySimBlocks
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Locally
|
|
70
|
+
|
|
71
|
+
Clone the repository and install locally:
|
|
72
|
+
```
|
|
73
|
+
git clone https://github.com/AlessandriniAntoine/pySimBlocks.git
|
|
74
|
+
cd pySimBlocks
|
|
75
|
+
pip install .
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Getting Started
|
|
79
|
+
|
|
80
|
+
### Quick Example
|
|
81
|
+
|
|
82
|
+
The following example models a simple first-order low-pass filter, defined by
|
|
83
|
+
the difference equation:
|
|
84
|
+
|
|
85
|
+
$$ y[k] = \alpha x[k] + (1-\alpha) y[k-1] $$
|
|
86
|
+
|
|
87
|
+
It can be implemented in pySimBlocks using the following code:
|
|
88
|
+
|
|
89
|
+
```python
|
|
90
|
+
from pySimBlocks import Model, Simulator, SimulationConfig, PlotConfig
|
|
91
|
+
from pySimBlocks.blocks.operators import Gain, Sum, Delay
|
|
92
|
+
from pySimBlocks.blocks.sources import WhiteNoise
|
|
93
|
+
from pySimBlocks.project.plot_from_config import plot_from_config
|
|
94
|
+
|
|
95
|
+
# 1. Create the blocks
|
|
96
|
+
noise = WhiteNoise(name="noise", std=1.0)
|
|
97
|
+
delay = Delay(name="delay")
|
|
98
|
+
filtered = Sum("filtered", signs="++")
|
|
99
|
+
alpha_gain = Gain(name="alpha", gain=0.1)
|
|
100
|
+
complement = Gain(name="complement", gain=0.9)
|
|
101
|
+
|
|
102
|
+
# 2. Build the model
|
|
103
|
+
model = Model("Example")
|
|
104
|
+
for block in [noise, delay, filtered, alpha_gain, complement]:
|
|
105
|
+
model.add_block(block)
|
|
106
|
+
|
|
107
|
+
model.connect("noise", "out", "alpha", "in")
|
|
108
|
+
model.connect("delay", "out", "complement", "in")
|
|
109
|
+
model.connect("alpha", "out", "filtered", "in1")
|
|
110
|
+
model.connect("complement", "out", "filtered", "in2")
|
|
111
|
+
model.connect("filtered", "out", "delay", "in")
|
|
112
|
+
|
|
113
|
+
# 3. Simulate the model
|
|
114
|
+
sim_cfg = SimulationConfig(dt=0.05, T=30.)
|
|
115
|
+
sim = Simulator(model, sim_cfg)
|
|
116
|
+
logs = sim.run(logging=["noise.outputs.out", "filtered.outputs.out"])
|
|
117
|
+
|
|
118
|
+
# 4. Plot the results
|
|
119
|
+
plot_cfg = PlotConfig([
|
|
120
|
+
{"title": "Noisy signal vs Filtered",
|
|
121
|
+
"signals": ["noise.outputs.out", "filtered.outputs.out"],},
|
|
122
|
+
])
|
|
123
|
+
plot_from_config(logs, plot_cfg)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
The resulting plot should look like this:
|
|
127
|
+
|
|
128
|
+

|
|
129
|
+
|
|
130
|
+
See [examples/quick_start/filter.py](./examples/quick_start/filter.py)
|
|
131
|
+
to run the example yourself.
|
|
132
|
+
|
|
133
|
+
### Graphical Editor
|
|
134
|
+
|
|
135
|
+
The exact same model can be constructed visually using the graphical editor (as
|
|
136
|
+
shown in the image above of this README).
|
|
137
|
+
|
|
138
|
+
To open the graphical editor, run:
|
|
139
|
+
```bash
|
|
140
|
+
pysimblocks gui examples/quick_start/gui
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
The quick-start GUI project is stored in a single
|
|
144
|
+
[examples/quick_start/gui/project.yaml](./examples/quick_start/gui/project.yaml) file.
|
|
145
|
+
|
|
146
|
+
### Learning Resources
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
#### Tutorials
|
|
150
|
+
|
|
151
|
+
Three step-by-step tutorials are available detailed in the
|
|
152
|
+
[guide](./docs/User_Guide/getting_started.md):
|
|
153
|
+
|
|
154
|
+
| | Tutorial | Description |
|
|
155
|
+
|---|---|---|
|
|
156
|
+
| 1 | [Python API](./docs/User_Guide/tutorial_1_python.md) | Build a closed-loop PI control system in pure Python |
|
|
157
|
+
| 2 | [GUI](./docs/User_Guide/tutorial_2_gui.md) | Build the same system visually with the graphical editor |
|
|
158
|
+
| 3 | [SOFA](./docs/User_Guide/tutorial_3_sofa.md) | Replace the plant with a SOFA physics simulation |
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
#### Other Examples
|
|
162
|
+
|
|
163
|
+
A collection of basic and advanced examples is available in the
|
|
164
|
+
[examples](./examples) directory, including:
|
|
165
|
+
|
|
166
|
+
- Control system demonstrations
|
|
167
|
+
- SOFA-based simulations (tested with SOFA v24.06 and later.)
|
|
168
|
+
- Hardware and real-time use cases
|
|
169
|
+
- Comparisons with external tools
|
|
170
|
+
|
|
171
|
+
See [examples/README.md](./examples/README.md) for an overview.
|
|
172
|
+
|
|
173
|
+
## Information
|
|
174
|
+
|
|
175
|
+
### License
|
|
176
|
+
|
|
177
|
+
pySimBlocks is licensed under [LGPL-3.0-or-later](./LICENSE.md).
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
© 2026 Université de Lille & INRIA – Licensed under LGPL-3.0-or-later
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
examples/advanced/hardware/block_diagram.py,sha256=HYNk3L0-koVO4deqqkc-BPPaD24FwwFjxmxKymp-xRg,4994
|
|
2
|
+
examples/advanced/hardware/camera.py,sha256=O9aRIbayjHlY4InjhpsBnaaRjEbyc7Gb1PfWhq6tErQ,2956
|
|
3
|
+
examples/advanced/hardware/gui_emio.py,sha256=YdAfg5HLlGy382bBHudl9EQkWQzkl7R1iDQvY2t7Nr4,8831
|
|
4
|
+
examples/advanced/hardware/lmi.py,sha256=AHr26xH0togG7KeOuzLIF5v9YqvEkyJNbCCQb-K9KA0,1983
|
|
5
|
+
examples/advanced/hardware/main.py,sha256=BdzhBftR-AllcEBxsf89NqzdZvUVaTto08JOBc4Unqw,1522
|
|
6
|
+
examples/advanced/hardware/parameters.py,sha256=kfL8AyIUfJxuYuxh0Zr6U-EK2b3iHKG18rPav1Py5dY,1147
|
|
7
|
+
examples/advanced/qp_problem/params.py,sha256=mOcO1IQ_L5XdMHHMOTMEgZg_vL7PiAgj4lqtYwCUJxA,267
|
|
8
|
+
examples/advanced/qp_problem/run.py,sha256=1b7CZGC3akQAK_0mi6pMQzgYVcz81c1JcQWL2wbRUgQ,407
|
|
9
|
+
examples/advanced/sofa/gui/finger/Finger.py,sha256=4CzX-7yYZxiaMkPPkTP8fK5H94dWJ_goyL2DPo7CrPs,5643
|
|
10
|
+
examples/advanced/sofa/gui/finger/FingerController.py,sha256=VvKMZ7ieWfFRdu5soxHjq9PzW_sXwMRnGV2Y4-IT7lo,1549
|
|
11
|
+
examples/advanced/sofa/gui/finger/parameters_auto.py,sha256=ylLAnXux0G-dTOH2vkUPax2EkpeDklnHqGf0KSx8b70,411
|
|
12
|
+
examples/advanced/sofa/gui/sofa_plant/run.py,sha256=1b7CZGC3akQAK_0mi6pMQzgYVcz81c1JcQWL2wbRUgQ,407
|
|
13
|
+
examples/advanced/sofa/python/Finger.py,sha256=3VFutRXn_PuQ7PcOZsMJW4vSLvC7evk1wu0M8nJkTTU,5694
|
|
14
|
+
examples/advanced/sofa/python/FingerController.py,sha256=EIbVyYD1FxXZeXKL_ZOxffGe-gGK9OTrA-6327Ux_eQ,1460
|
|
15
|
+
examples/advanced/sofa/python/closedloop.py,sha256=o95fMT0t0PokS5yVshj73OYCKS1lrjvEbZaOBhHJWls,1831
|
|
16
|
+
examples/advanced/sofa/python/openloop.py,sha256=WN-f-fD_08mP9wwHQUK3Bb20K8JE23CfLk38UY0kZfc,1365
|
|
17
|
+
examples/basics/observer.py,sha256=UZbgpM4OnrflQry7wd1_HzPScGtQLHdKvCTdnGGTlKM,1922
|
|
18
|
+
examples/basics/algebraic_function/g.py,sha256=L1XdViDcxE3mcBIUSreURlkqQMe4vy9SyiMUJ6oaISw,113
|
|
19
|
+
examples/basics/algebraic_function/run.py,sha256=8DASmbSULTz47j_Db976fo0tg4Pifdv1ZpH0NNPrx9U,407
|
|
20
|
+
examples/basics/dc_motor/multiple_order.py,sha256=VFUc_ouNz1hqTCegK7szaQI8gtVMnVthO7R7hNsE7S0,2726
|
|
21
|
+
examples/basics/dc_motor/openloop.py,sha256=2gxX2ySOsM--DfQqnEh2NysVsbis6_oBeFUaD8TTwck,1531
|
|
22
|
+
examples/basics/dc_motor/pi.py,sha256=FEaBJwQeYnQ4wMXGfPDFvsQ-6-vo3QPz7Piwhqq_fqM,3002
|
|
23
|
+
examples/basics/dc_motor/pid.py,sha256=il_li_4wkptAxl5HKDhUZkP3Z3I7VLKc5aChOF_KdWQ,3535
|
|
24
|
+
examples/basics/dc_motor/pid_block.py,sha256=98lx0Vy60LNFHTxhy6F67aTsMb0kRjPMW7hXW-OjpFY,2172
|
|
25
|
+
examples/basics/dc_motor/pid_block_vs_manual.py,sha256=oJ14zZBy91LFhye_UbP-OaT_-UR0Gz6sZQCwvPPQ-N4,4640
|
|
26
|
+
examples/basics/dc_motor/gui/run.py,sha256=1b7CZGC3akQAK_0mi6pMQzgYVcz81c1JcQWL2wbRUgQ,407
|
|
27
|
+
examples/basics/external/parameters.py,sha256=r7Uxvdvs3ZrIXQGumrTAauCsyC53bEEwGM4BQUpq1gk,64
|
|
28
|
+
examples/basics/external/run.py,sha256=1b7CZGC3akQAK_0mi6pMQzgYVcz81c1JcQWL2wbRUgQ,407
|
|
29
|
+
examples/basics/file_sources/temp.py,sha256=Em4oIXuoNAy4_knl4RpRpQOlXihCONvdSbKu-XgZLJM,391
|
|
30
|
+
examples/basics/state_feedback/state_feedback.py,sha256=-ut1V9nVbk4Jeux2W2KcKiJECk_ptkEO5jeSZJK_rhA,2748
|
|
31
|
+
examples/basics/state_feedback/gui/parameters.py,sha256=1csncxDPMbYR5LDSkIWye_dymF-u7BYpw9Q6k5KSs8w,227
|
|
32
|
+
examples/basics/state_feedback/gui/run.py,sha256=8DASmbSULTz47j_Db976fo0tg4Pifdv1ZpH0NNPrx9U,407
|
|
33
|
+
examples/basics/state_space/linear/ss_block.py,sha256=jRCoRHMFiDU7RmZNsuINw9yHtTLF-xUnQuiZBs_t8c0,2204
|
|
34
|
+
examples/basics/state_space/linear/ss_manual.py,sha256=Y7Yw2ChLUGURGyQg4s0KjQdJdOrLJcSoWPObyJB704Q,3375
|
|
35
|
+
examples/basics/state_space/linear/gui/run.py,sha256=1b7CZGC3akQAK_0mi6pMQzgYVcz81c1JcQWL2wbRUgQ,407
|
|
36
|
+
examples/basics/state_space/non_linear/nlss.py,sha256=IXK3Tr9qnQUtzA2BmZHZwej3IOPifsez5fGCwSvy_ho,977
|
|
37
|
+
examples/basics/state_space/non_linear/run.py,sha256=1b7CZGC3akQAK_0mi6pMQzgYVcz81c1JcQWL2wbRUgQ,407
|
|
38
|
+
examples/basics/state_space/polytope/params.py,sha256=3zxd-GZknN8OiuCTRJTmpfFALnlLUOFURVSRHZqFkc0,694
|
|
39
|
+
examples/basics/state_space/polytope/weights.py,sha256=yF2g-7xVS15NP1MpUzLETvBC-O1aNzcxlHqvkp7cN20,291
|
|
40
|
+
examples/comparison/simulink/convert.py,sha256=zpKKvL-VkmFb43nn52lRVlY4kIcZhCHZaH7ZrPQmoy4,600
|
|
41
|
+
examples/comparison/simulink/openloop.py,sha256=sWWUk71be7OkgUUAQiXIM52io1JR_4kMwhTHZP9V_60,3822
|
|
42
|
+
examples/comparison/simulink/pi.py,sha256=1RWmTPSU6qqYvRkK2xCNKdZszPUCemApKIc70sjNunc,4595
|
|
43
|
+
examples/comparison/simulink/pid.py,sha256=Z6XAKbu6YJ8GZeJNxNQs16KcbkMgMtcxbwovX8MT_zI,5047
|
|
44
|
+
examples/comparison/simulink/pid_backward.py,sha256=zUa74IdqcwO5hqx_zatPSbuzNz1gsIpstR6Hi4XHkb4,5196
|
|
45
|
+
examples/quick_start/filter.py,sha256=uevsLTgGPSvcTsD0Z1aGn06Zcp5bySP8hLsM2iNTM40,1216
|
|
46
|
+
examples/quick_start/gui/run.py,sha256=8DASmbSULTz47j_Db976fo0tg4Pifdv1ZpH0NNPrx9U,407
|
|
47
|
+
examples/tutorials/tutorial_1_python/main.py,sha256=-BQZxdImaOc2D0CLka0BcAxdrATntUkmvVXSnxyP3_Q,3271
|
|
48
|
+
examples/tutorials/tutorial_3_sofa/finger/Finger.py,sha256=CrJW-CCoti_EgP2y0XddYmqgbKI-6uUb-aRKy1JULGQ,6697
|
|
49
|
+
examples/tutorials/tutorial_3_sofa/finger/FingerController.py,sha256=yPwUBSHOlunkHu_J0fkVGuuZWiWAyLL-7oWpKUc3kuY,1172
|
|
50
|
+
pySimBlocks/__init__.py,sha256=GSMcn6ftAz0t84i9-3Vj8OxL1lmycVOisi4woN6_LoM,1464
|
|
51
|
+
pySimBlocks/cli.py,sha256=ouKJ-wS2PV2BUSkl07vqD5Qo7cqiP5zwgutrAjeinbA,4465
|
|
52
|
+
pySimBlocks/blocks/__init__.py,sha256=jwrc-sQ6jJq-fZnXBpGyeYNz19AaKOFs2XjGgMBRXJ8,2150
|
|
53
|
+
pySimBlocks/blocks/controllers/__init__.py,sha256=ORdofO3Jhg8afTB7UrgyKRYfXSxkNhubxU2tyMyebAU,1305
|
|
54
|
+
pySimBlocks/blocks/controllers/pid.py,sha256=vXKZLF7Eu-tODDveL_E7IYKvzc7Ema-TgvSQwlMW3qU,8860
|
|
55
|
+
pySimBlocks/blocks/controllers/state_feedback.py,sha256=-4EgUFKbEoEVaieGICWRzn0wwJAEWr7YkoHGegbe9V0,5041
|
|
56
|
+
pySimBlocks/blocks/interfaces/__init__.py,sha256=Lzr25AAFjCFLPXh1BD4FEdYBVS_pYStPnq85b6uv4sc,1337
|
|
57
|
+
pySimBlocks/blocks/interfaces/external_input.py,sha256=UTe7lsKhQ-V_kV-tPNa0PrSoYeoFmD7irlodhg76Mk4,3991
|
|
58
|
+
pySimBlocks/blocks/interfaces/external_output.py,sha256=2sf_C9TyXfYL8KggN4RqmB6RJPP_EBAgo9FGWCpu4pI,4052
|
|
59
|
+
pySimBlocks/blocks/observers/__init__.py,sha256=waBXuuSvjqsD7vrx0DfaonQ6mrliHSa-G1LCEocu4ms,1221
|
|
60
|
+
pySimBlocks/blocks/observers/luenberger.py,sha256=ShlocF8LVL4D2SZx6J_VDtDSlRiUCtIe9OhdITAMdfQ,6347
|
|
61
|
+
pySimBlocks/blocks/operators/__init__.py,sha256=cC7lGgeu5H0nTKZJtKCUkXB6bsr79i6XcBz-pF7Bwtc,2080
|
|
62
|
+
pySimBlocks/blocks/operators/algebraic_function.py,sha256=6lj2mqsCE54CNNRwQOANHhAKWgJtvD39Q2K_98JN2so,9964
|
|
63
|
+
pySimBlocks/blocks/operators/dead_zone.py,sha256=-mCCVX4eG-2u48r5b86xh1loF3YfauQuFGsJ04oo1l4,7167
|
|
64
|
+
pySimBlocks/blocks/operators/delay.py,sha256=Eb5-eYcIOhQ9AXjFOtkkNpuB2VPywom8qv26VlHZAw4,9898
|
|
65
|
+
pySimBlocks/blocks/operators/demux.py,sha256=qf_1CNkLWgHrblwU-Rkxzmgce_WaunDI-A7tGyJUnmI,4372
|
|
66
|
+
pySimBlocks/blocks/operators/discrete_derivator.py,sha256=NRE4etXMxkQeoUwNA_DE3Q3tdwTppJccJ1ZfGeCFTGI,9573
|
|
67
|
+
pySimBlocks/blocks/operators/discrete_integrator.py,sha256=HwWHzjqz2OGJJ7-NT-hZJlCU3HOI9GdBVWi5YOOF_nQ,10668
|
|
68
|
+
pySimBlocks/blocks/operators/gain.py,sha256=j26MlzMxwtfDBxHX4QEBVX4FUhN4MlkpcynWMDKcrWw,10558
|
|
69
|
+
pySimBlocks/blocks/operators/mux.py,sha256=IOiCYNdkI4HrsNBqrZHmcf9rMMY2rvGryknCQH8lQbY,4763
|
|
70
|
+
pySimBlocks/blocks/operators/product.py,sha256=Lre9lf6MUtOMhxSYTOMTJjwUF7H2KOz3jdfsQJ-wrIo,7600
|
|
71
|
+
pySimBlocks/blocks/operators/rate_limiter.py,sha256=v6ny5bcjk_41QJ1lJQzFq6qshwIO6s5YKkYfnuKffCY,8373
|
|
72
|
+
pySimBlocks/blocks/operators/saturation.py,sha256=qoYNac27BkjxtgMKaIRQzFS7qMsEgfb75hYypB3jPdQ,6738
|
|
73
|
+
pySimBlocks/blocks/operators/sum.py,sha256=UqncQLnQDNiMwEbut7tdcIhOTpwGsi-encP74xPTxi4,7090
|
|
74
|
+
pySimBlocks/blocks/operators/zero_order_hold.py,sha256=nVI_LG1fIsapUSU_AfyjPfOp9yKSPKadjaSro8f0hHs,5071
|
|
75
|
+
pySimBlocks/blocks/optimizers/__init__.py,sha256=fZtNolx2L7CKAI2-4F4Agrn3knHtNJg1Kw5KU1OOTBY,1245
|
|
76
|
+
pySimBlocks/blocks/optimizers/quadratic_program.py,sha256=EBdGFvBOH1z867dTORGImnhuv9u9Bj6osyYgitDxlhA,11935
|
|
77
|
+
pySimBlocks/blocks/sources/__init__.py,sha256=F_F4p6LqGneyEN-dYuWFZDeHpGwfgc5-dbtcwIPMGSM,1677
|
|
78
|
+
pySimBlocks/blocks/sources/chirp.py,sha256=yBfHv6eJrYsUNzO6R-tAGBr2V10tWYNaW18xXZgFxq8,5727
|
|
79
|
+
pySimBlocks/blocks/sources/constant.py,sha256=UyclOBQtlnLk0Ua5v72iGomauci0NfxVupmkiRPfj7A,3091
|
|
80
|
+
pySimBlocks/blocks/sources/file_source.py,sha256=EAquC3KR6FzY2d9JimbXod5pVkL9Ab8ZsKrETz6UGWI,11383
|
|
81
|
+
pySimBlocks/blocks/sources/function_source.py,sha256=7l_jkePCw10OL4pRoyW0DWqILxk2UTWBVJGf6ACjXis,7538
|
|
82
|
+
pySimBlocks/blocks/sources/ramp.py,sha256=M78JCQ23UrXQ4TBwtWCDzPbETBd4MLi6GjtuoLlAiRU,4136
|
|
83
|
+
pySimBlocks/blocks/sources/sinusoidal.py,sha256=0aK14axdiwBDKIwWzoWdxrjfd1iFbTV5Zn6NKae1au4,4391
|
|
84
|
+
pySimBlocks/blocks/sources/step.py,sha256=drnaSO7CQ1kJaAqy6CfQiektVA3JhuCg2Gj3-scsWHY,5061
|
|
85
|
+
pySimBlocks/blocks/sources/white_noise.py,sha256=dJSFULn8K7w1wkxu7HYaCudPBUoHga--GO_YIDhz4Ok,4091
|
|
86
|
+
pySimBlocks/blocks/systems/__init__.py,sha256=RGJEO8YeDVTO6aGspYUYfZfWvJLEhGa_r0s1Iw_rLdc,1358
|
|
87
|
+
pySimBlocks/blocks/systems/linear_state_space.py,sha256=diFGRNDi_TQNKLDmETErsZ5xYY-0L9p721UAZKTmaxs,6436
|
|
88
|
+
pySimBlocks/blocks/systems/non_linear_state_space.py,sha256=Yqfwgkbq3f8AUbFlbCzysuuTwCY7_wA1BrAH9LOPhVk,11184
|
|
89
|
+
pySimBlocks/blocks/systems/polytopic_state_space.py,sha256=WbAurzJXv6Cuu0e27zEoMApiIDW39XSWBh-BMRM1ObU,7011
|
|
90
|
+
pySimBlocks/blocks/systems/sofa/__init__.py,sha256=pe1ZFXJH5XU3GtAzCCYQFgJY9ulEyOBZ38yc7YFjyTU,1451
|
|
91
|
+
pySimBlocks/blocks/systems/sofa/sofa_controller.py,sha256=wwYqjKK_aUhIc5WNlytIa85G1qq6w1T_uCO0khYhRMI,18107
|
|
92
|
+
pySimBlocks/blocks/systems/sofa/sofa_exchange_i_o.py,sha256=8ny4ufy5ndNQmVuakKn6k98pXM7jRkPxO0BFDBzwwNQ,4418
|
|
93
|
+
pySimBlocks/blocks/systems/sofa/sofa_plant.py,sha256=qYU7hsbwiTMJ34E6ERkQWxVa6vdrK0cdyU-IDU5I2M0,10015
|
|
94
|
+
pySimBlocks/core/__init__.py,sha256=nCbABFl_lIP8PVRg0R0kP9--Z_5RXRIeahNVyQDn8s0,1431
|
|
95
|
+
pySimBlocks/core/block.py,sha256=Ej-dK9Jndv-9I96W_ajk9xcfDk51jUocfnJzTQefiWA,5837
|
|
96
|
+
pySimBlocks/core/block_source.py,sha256=-1EWmhdcnIXqbg-WMgb5xBhyG5puQPp4XzKVUMzJSnk,3941
|
|
97
|
+
pySimBlocks/core/config.py,sha256=0XLnm3R_QtRI6yo7FQpMoaHAZ9LoLQd3SAafuGDK3jo,3239
|
|
98
|
+
pySimBlocks/core/fixed_time_manager.py,sha256=lMjbt_uQEocG0Y_IUVqZGWbGM1LyBBcBAguspjUG1Sk,2087
|
|
99
|
+
pySimBlocks/core/model.py,sha256=ckOb-H5Al6BnW9T_MFApk0uw9vPchdjHWJznSo1HEDs,9383
|
|
100
|
+
pySimBlocks/core/scheduler.py,sha256=-gSJt6sn5l3je1zaNY4MgdNbpeJ--Hik98UIvQtVvsM,1541
|
|
101
|
+
pySimBlocks/core/simulator.py,sha256=NvoqjC_7rsnzOrCHVBPwM8cXTg8hWC_X2_SYYGyu1Ec,12378
|
|
102
|
+
pySimBlocks/core/task.py,sha256=kt6mQ8ew3Zr2AESYPeO3bDR13rC7C5zWixUAXljA_5U,2978
|
|
103
|
+
pySimBlocks/docs/blocks/controllers/pid.md,sha256=KkiyckyLyMH2Oj1aTpvnRkXeeCZ5-bSEhddBppmpFHE,1889
|
|
104
|
+
pySimBlocks/docs/blocks/controllers/state_feedback.md,sha256=7OIlWJRRlziaUtBOVfaKqChxhJYkUy_zxmYfDPeCN7U,1190
|
|
105
|
+
pySimBlocks/docs/blocks/interfaces/external_input.md,sha256=x96J605gLGenmTT_-ef-m0yJG0Se2pLsJl5h1LmiRWE,837
|
|
106
|
+
pySimBlocks/docs/blocks/interfaces/external_output.md,sha256=TXuQmSNoZq4ulviduZNT8cI1K5-AXc00u2VJ3vcPi8o,852
|
|
107
|
+
pySimBlocks/docs/blocks/observers/luenberger.md,sha256=uPW87_mM27eHoKx2m5JF09xBmA6Az-3h3AQgmC6til4,1510
|
|
108
|
+
pySimBlocks/docs/blocks/operators/algebraic_function.md,sha256=ToonLKJ97V3lGcQCd4uJfYyFEzruqAjCovsggb95NOA,2072
|
|
109
|
+
pySimBlocks/docs/blocks/operators/dead_zone.md,sha256=0Y_Q9youGEs9_GbIk5gpgu0f38ysz4OujoL2xfKDCUA,1691
|
|
110
|
+
pySimBlocks/docs/blocks/operators/delay.md,sha256=uUdg1W7lSv-ctYGyU1LByZiaP29UY3lZvgDwmbXlIdQ,2183
|
|
111
|
+
pySimBlocks/docs/blocks/operators/demux.md,sha256=d7AJTMghBCWX0gezMQfJWODckbG0R9xnqLUX-bmFtaQ,1425
|
|
112
|
+
pySimBlocks/docs/blocks/operators/discrete_derivator.md,sha256=jXkBsSKLezXAzFiaxgiYyskAS_dNoBimjKhR4JRaGFk,1412
|
|
113
|
+
pySimBlocks/docs/blocks/operators/discrete_integrator.md,sha256=gtTv3FlMcBY1g-OVJazOjMR2VfTnM6Yyl_DecJqfph4,2350
|
|
114
|
+
pySimBlocks/docs/blocks/operators/gain.md,sha256=LzZxd2nHetvPtMF2zGXwUwgrKtItyERnmSg9g-wobcw,2289
|
|
115
|
+
pySimBlocks/docs/blocks/operators/mux.md,sha256=KO-8ZdwQj_h0R3Vg-PFQZ-0zqdKNxT_6PRaWVFj0NfA,1319
|
|
116
|
+
pySimBlocks/docs/blocks/operators/product.md,sha256=IQ3NYG3iNOETrtJ2qHhFBNiGV-h8YvIBXgp5N5NpbJQ,1668
|
|
117
|
+
pySimBlocks/docs/blocks/operators/rate_limiter.md,sha256=NTgSyq2Y37CjpkvgYR5NC5xSasdaz0y03HlUUNi81ls,1850
|
|
118
|
+
pySimBlocks/docs/blocks/operators/saturation.md,sha256=nnO3348TPT-wGnLejPLfQBjQiGoDwqKazfuV70BDLZE,1469
|
|
119
|
+
pySimBlocks/docs/blocks/operators/sum.md,sha256=S3XenKh3LlQ0Tn_MZhii1mvpxQPVtcW8mYUjEhhlt0g,1085
|
|
120
|
+
pySimBlocks/docs/blocks/operators/zero_order_hold.md,sha256=Y58Ae3KprGMk5NeMIY_xCsoMTWjocmkraTpvOqxEbOU,1372
|
|
121
|
+
pySimBlocks/docs/blocks/optimizers/quadratic_program.md,sha256=ZP9hRvafD15hkxGelZXuZnuuFz0PVOdwMzz_gxXVazo,3183
|
|
122
|
+
pySimBlocks/docs/blocks/sources/chirp.md,sha256=z80CrJCZWBnsdK08LkW3XlZTxCxFz4fI-D3XTEpBp3o,2667
|
|
123
|
+
pySimBlocks/docs/blocks/sources/constant.md,sha256=7kjs8YNI1n00KEJ0ZeOf1MJhFqjdV0nQjp-eDzB2ZLM,1013
|
|
124
|
+
pySimBlocks/docs/blocks/sources/file_source.md,sha256=4xdyAfQJoUi0WVwJ8_iX36Lnv5i3M--r-R0UwxC169U,1531
|
|
125
|
+
pySimBlocks/docs/blocks/sources/function_source.md,sha256=l2HOiUIxZ_-l5q8LC5_nG9OIhev37mbcQjPf852ihGQ,1379
|
|
126
|
+
pySimBlocks/docs/blocks/sources/ramp.md,sha256=DBTW5YNFl35f1pUSrcjS5LC2OKTpdXhwomNSSwCgji8,1360
|
|
127
|
+
pySimBlocks/docs/blocks/sources/sinusoidal.md,sha256=t2htB4GkX3V5KzGbue8kOQ7IejzNZTLi-qIWeQDckI4,1479
|
|
128
|
+
pySimBlocks/docs/blocks/sources/step.md,sha256=OLykuwVr4gRd5jqjwkzqSILWzfxFbix3ltqsrzXLFs8,1452
|
|
129
|
+
pySimBlocks/docs/blocks/sources/white_noise.md,sha256=oILSK3I5FwcVXV6Ipvgwbwtnz5IOsFjdFn5rM75TcZo,1428
|
|
130
|
+
pySimBlocks/docs/blocks/systems/linear_state_space.md,sha256=upopyDYyjFWQX72jfjJtWs14LLLD4-czt-eImko0fyE,1401
|
|
131
|
+
pySimBlocks/docs/blocks/systems/non_linear_state_space.md,sha256=0Ek_LpR05yCvwQLjhwcQ_w6JDy1_8UFsWMbxg1VZMZM,2783
|
|
132
|
+
pySimBlocks/docs/blocks/systems/polytopic_state_space.md,sha256=GUtjUOxnYBPSI-iRdVCKdRWN2123IusFdn0EbwRhRfk,1819
|
|
133
|
+
pySimBlocks/docs/blocks/systems/sofa/sofa_exchange_i_o.md,sha256=9sr2GmEHfQ_r0hEfAzyihCZt453fI_owJDPFwv15OjI,1789
|
|
134
|
+
pySimBlocks/docs/blocks/systems/sofa/sofa_plant.md,sha256=4R5x15qz_4N0zb3kiz--VsFpfRfdTpny02udkoGx3fI,2145
|
|
135
|
+
pySimBlocks/gui/__init__.py,sha256=85q7ju0Fmnx2kmYMXAP-BGpue5CZGOAcRImYfB0YjT0,1136
|
|
136
|
+
pySimBlocks/gui/editor.py,sha256=4GpVTlOa5L2Eopwci1eRmUE14Ew2cqcnXh4r1s5X_V4,1885
|
|
137
|
+
pySimBlocks/gui/main_window.py,sha256=UjlB7GWelvdJ1O4vGOV-QE-TILvuFhaYEMeoPirmYJM,7107
|
|
138
|
+
pySimBlocks/gui/project_controller.py,sha256=toXhfz9KJpw9VJyezEqijN_0eMt6r7FdN8ntCQX8p08,11815
|
|
139
|
+
pySimBlocks/gui/addons/__init__.py,sha256=8_Azcqim-lux41SWyhlVWGx9fhFWjPT5SzbUYS7d41c,1135
|
|
140
|
+
pySimBlocks/gui/addons/sofa/__init__.py,sha256=8_Azcqim-lux41SWyhlVWGx9fhFWjPT5SzbUYS7d41c,1135
|
|
141
|
+
pySimBlocks/gui/addons/sofa/sofa_dialog.py,sha256=pfN1bf6uoRoi3oK-G5Yiym7I_QK5kIGK0SXTcif8RWE,6124
|
|
142
|
+
pySimBlocks/gui/addons/sofa/sofa_service.py,sha256=gqYuoda9BGQio4aKdCf-VMgwneoQ7wncEug8hgTtq6M,8628
|
|
143
|
+
pySimBlocks/gui/blocks/block_dialog_session.py,sha256=TXvbrmyhY5AeiSMqDKEz-70stuFkfyltB1eMo3Fma3A,1881
|
|
144
|
+
pySimBlocks/gui/blocks/block_meta.py,sha256=9VGHxMYjHkveWqI79otcKidvkt4cgUfKYvIRMbxhLp8,14226
|
|
145
|
+
pySimBlocks/gui/blocks/parameter_meta.py,sha256=5dvqCC15OXWzlf_-4CD9PfgOMV5UgIdRIyoY2tVgY3E,1456
|
|
146
|
+
pySimBlocks/gui/blocks/port_meta.py,sha256=uYdHLCLySZfWQHMEyucpWTXmu5ObuExHDzRyNVYw8wQ,1317
|
|
147
|
+
pySimBlocks/gui/blocks/controllers/pid.py,sha256=I3pvNWrXKNDNVcqx9E08merpwKCEHpjTYDSSDkiibeI,3949
|
|
148
|
+
pySimBlocks/gui/blocks/controllers/state_feedback.py,sha256=zl99xHJ8RMHkyTKdSocbKwYRllxQVPb5C-BGQjwC5_Q,2858
|
|
149
|
+
pySimBlocks/gui/blocks/interfaces/external_input.py,sha256=-ag5zfOkEEKabJSnZvNKZqUHBsD4eogQEj_kZU9zdnQ,2554
|
|
150
|
+
pySimBlocks/gui/blocks/interfaces/external_output.py,sha256=enZNWOtOFrXZT1-vZZBdiKScR9SWsN8Ll3oj0wBkueo,2531
|
|
151
|
+
pySimBlocks/gui/blocks/observers/luenberger.py,sha256=znJas5pvDQwa-BBmSLonMzr1o9SbDpdSpoZv88ZzKU8,3676
|
|
152
|
+
pySimBlocks/gui/blocks/operators/algebraic_function.py,sha256=dcYQUI0-6WE_oGz6LoL4R_zBAc1h5JS-FXKBcciAYiE,8541
|
|
153
|
+
pySimBlocks/gui/blocks/operators/dead_zone.py,sha256=Q4K9rDSEqDARKA1Uvvro6VLwBPmJTW3FCuRkCrjys9M,2931
|
|
154
|
+
pySimBlocks/gui/blocks/operators/delay.py,sha256=7pWZNa0TFjKpsWcYslkrqcKQGcY91YNmS0aP6BPOnyU,2808
|
|
155
|
+
pySimBlocks/gui/blocks/operators/demux.py,sha256=Irjq9p21OOppvfnEEkUU88I8Afpu8BuDSBUepGurSRo,3512
|
|
156
|
+
pySimBlocks/gui/blocks/operators/discrete_derivator.py,sha256=iKqKHCPh5xARxcpWLTR-2V-_5S0avHlfeqrvUAmfi3E,2488
|
|
157
|
+
pySimBlocks/gui/blocks/operators/discrete_integrator.py,sha256=RFWU4fp9CTPRfE4Qrfte5mfNUt5LoR9pGEHNTf0xxFQ,2889
|
|
158
|
+
pySimBlocks/gui/blocks/operators/gain.py,sha256=eEUrdFeGIQb2txhn_3VniPWf6rMDXngN4aO8vjxmCYI,2801
|
|
159
|
+
pySimBlocks/gui/blocks/operators/mux.py,sha256=vUv2oqWWmddDjWeuqbrA-fDQODN6_Tp7tbXeC4TYVlM,3563
|
|
160
|
+
pySimBlocks/gui/blocks/operators/product.py,sha256=WpDfPtNFBxkneZ10e4SrEva7GTPX-q_BBGRgdEQidwo,4022
|
|
161
|
+
pySimBlocks/gui/blocks/operators/rate_limiter.py,sha256=qN3Y2Hz6xq272d14Uo598OvSWcJavspznbdDGu5SdI8,2899
|
|
162
|
+
pySimBlocks/gui/blocks/operators/saturation.py,sha256=yRvfW-hL3Xa4hnO2024nP-Wnwht4nWwosMiB4ViY06M,2642
|
|
163
|
+
pySimBlocks/gui/blocks/operators/sum.py,sha256=K4NfEK_QE12kH_LeRbi9Izey8dTtKLuAlk-81lcxiC4,3150
|
|
164
|
+
pySimBlocks/gui/blocks/operators/zero_order_hold.py,sha256=k1Ug8NjkSHtIVGKUHO4cs6hdqXVOYk5xX_1cBWwOHco,2453
|
|
165
|
+
pySimBlocks/gui/blocks/optimizers/quadratic_program.py,sha256=_ShhfShOEw5hlB9bgxHr5b-2hSEZ9jcYQ-3AOH5g9hs,4934
|
|
166
|
+
pySimBlocks/gui/blocks/sources/chirp.py,sha256=vDAF45uIEhGvzQ2DlCb3xQ2D8DvIl10YXNDMfWm7Ltg,4819
|
|
167
|
+
pySimBlocks/gui/blocks/sources/constant.py,sha256=-xV1SAiHFOpHfgiNR02Y_HR4Nb5i0yEZNx9zZ9COZfI,2324
|
|
168
|
+
pySimBlocks/gui/blocks/sources/file_source.py,sha256=FVO6y5ISp9MdN3gWJnyubItkOUbfiJCDmTVp5qC2ntU,7432
|
|
169
|
+
pySimBlocks/gui/blocks/sources/function_source.py,sha256=PC-NZvj0iwYkI-QYxTG3ADQD5ikv9usnV80JT6SAZi8,7635
|
|
170
|
+
pySimBlocks/gui/blocks/sources/ramp.py,sha256=hCA_rJaboplOzsF-7v_p12XBjifLEAn-Mo6jLxL8iJs,2779
|
|
171
|
+
pySimBlocks/gui/blocks/sources/sinusoidal.py,sha256=lkb5jPhcELhOm4SaGO0W7lEOzNIlL1ksjGxQuy8FwqA,3082
|
|
172
|
+
pySimBlocks/gui/blocks/sources/step.py,sha256=3tv0kd8hC8ndOcnorTGY5-n6GaVf7IV1QV1YUy7fTlY,3061
|
|
173
|
+
pySimBlocks/gui/blocks/sources/white_noise.py,sha256=Uzh1EM4RcE4TN4rufuQzJloaG5uxm0qj4Ip48yzGtbM,2716
|
|
174
|
+
pySimBlocks/gui/blocks/systems/linear_state_space.py,sha256=m6griIN2xIEZ_ekuduPyMGet5zBHie-zIDjt1_FtQlc,3472
|
|
175
|
+
pySimBlocks/gui/blocks/systems/non_linear_state_space.py,sha256=9_cMldEcJmOam_G7tqIMLwpPesqLEfLvv5UPxQwJzYU,8850
|
|
176
|
+
pySimBlocks/gui/blocks/systems/polytopic_state_space.py,sha256=abMKJA-Hu7fXlzxuAV3T9dkI4pPn15_47PQ0moXU-gE,3897
|
|
177
|
+
pySimBlocks/gui/blocks/systems/sofa/sofa_exchange_i_o.py,sha256=2EJgHlDh9q5g9F7yO-ED2QBoTk-WIJ_wkc6b6OO3MOA,8131
|
|
178
|
+
pySimBlocks/gui/blocks/systems/sofa/sofa_plant.py,sha256=8-dzNiSy1Gl8rDR8S_TELxtjEwTRBx-m-6CR-zSah3I,7900
|
|
179
|
+
pySimBlocks/gui/dialogs/__init__.py,sha256=8_Azcqim-lux41SWyhlVWGx9fhFWjPT5SzbUYS7d41c,1135
|
|
180
|
+
pySimBlocks/gui/dialogs/block_dialog.py,sha256=KDHc0aAEgUMAKl-eQCZNGr34gMzi87gpfn1-RBRb6H0,4695
|
|
181
|
+
pySimBlocks/gui/dialogs/display_yaml_dialog.py,sha256=AGgG0vPv13yCZKiMWcG_Uk8U9hdczDZ4mh5y5NdvvIk,3134
|
|
182
|
+
pySimBlocks/gui/dialogs/help_dialog.py,sha256=SBuxPBcfXGkA0DiyQyDj-kxJQqnYINEJ7TMNAqT2yM0,1641
|
|
183
|
+
pySimBlocks/gui/dialogs/plot_dialog.py,sha256=m47JQGcdqI7AZi3jLpgbX7Oeug_NgjjpAD6hikyElaU,8101
|
|
184
|
+
pySimBlocks/gui/dialogs/settings_dialog.py,sha256=C7sC3gRbtJbS9W8dpiqQuMqY6KSTxBYZQEnDy5i71dc,3414
|
|
185
|
+
pySimBlocks/gui/dialogs/unsaved_dialog.py,sha256=MoDXQCFa5X-0lUhZLr-5uz416HaU3qRsCofZfSMGmBc,3225
|
|
186
|
+
pySimBlocks/gui/dialogs/settings/plots.py,sha256=KsCpcuO-rkvIGM1zLtoiB6QFe688IppAqO9mEfZ6jFk,6652
|
|
187
|
+
pySimBlocks/gui/dialogs/settings/project.py,sha256=GsDSXmTtDmW2R1T5GyOmDF21VFxFJ09JcwAl4Kpdo0Y,5694
|
|
188
|
+
pySimBlocks/gui/dialogs/settings/simulation.py,sha256=iDi--we8jouq4bER_VPZppRW0Kh1zpCbUKUJyClTs10,5394
|
|
189
|
+
pySimBlocks/gui/graphics/__init__.py,sha256=1luRkzpmlwbGq3y4zHF1cj9o07ba83KdtKPei2i19xg,1387
|
|
190
|
+
pySimBlocks/gui/graphics/block_item.py,sha256=YiZBWRpWEzH5_q6OOv0Hz2Qkvs9IicypTLXKqRGQ9Ik,11674
|
|
191
|
+
pySimBlocks/gui/graphics/connection_item.py,sha256=-8_8_SAqv7OkjguSLSMkj1Lo7BjHOt4PmSMJ0kyJi-Y,10115
|
|
192
|
+
pySimBlocks/gui/graphics/port_item.py,sha256=uBrYFkT_U0sR0KhvCF9-vryKwRGN6gDFRQlUZRc5XHM,6081
|
|
193
|
+
pySimBlocks/gui/graphics/theme.py,sha256=vnsBtsyQYlSYSqwxsRqXNiUGFw7z9UjFNwaTEaKJMyY,4050
|
|
194
|
+
pySimBlocks/gui/models/__init__.py,sha256=lMkpPJpjzRq17M5uj6dCqo8oVlCXCfw2SirqsAl-FmM,1499
|
|
195
|
+
pySimBlocks/gui/models/block_instance.py,sha256=QRYPewS0LoQ9m00vPuBoLhj9BdArvg4MpeorgKYH9Uk,3790
|
|
196
|
+
pySimBlocks/gui/models/connection_instance.py,sha256=zIhM2TS02hv3zE36bfFyMgC_8oo-0XH0CqKVl9IhMcA,1810
|
|
197
|
+
pySimBlocks/gui/models/port_instance.py,sha256=rzCZ2KHGtrusAwFbKuLogv-0g8aKBeU9qYm_aL-V_Ac,2165
|
|
198
|
+
pySimBlocks/gui/models/project_simulation_params.py,sha256=U6PjmGTJZkkOUR-93Ml0rc82oBMbMx9rh3pEiiN4PFg,1985
|
|
199
|
+
pySimBlocks/gui/models/project_state.py,sha256=L-u0x_72aayBmky4cNdBt1qL3BEoI7xMicfLdeY_LhE,4460
|
|
200
|
+
pySimBlocks/gui/services/__init__.py,sha256=85q7ju0Fmnx2kmYMXAP-BGpue5CZGOAcRImYfB0YjT0,1136
|
|
201
|
+
pySimBlocks/gui/services/project_loader.py,sha256=qKL5nPuJUKTb1e6vXnQcwf-mbINDRJKS71LZ21JsoUY,14647
|
|
202
|
+
pySimBlocks/gui/services/project_saver.py,sha256=puX_LNZG1fQ7pSUm8FXs2jg1GLOpK4x0_DqU5AgQIQ4,2555
|
|
203
|
+
pySimBlocks/gui/services/simulation_runner.py,sha256=A7nDtWofqAv0I0Wz4jaSfcH8PmKymoE1-p0-y9nPk08,2562
|
|
204
|
+
pySimBlocks/gui/services/yaml_tools.py,sha256=keZM9T8DdzNDm6vk82dC75DJM96ejgzTXcrEm3tRr24,7971
|
|
205
|
+
pySimBlocks/gui/widgets/__init__.py,sha256=8_Azcqim-lux41SWyhlVWGx9fhFWjPT5SzbUYS7d41c,1135
|
|
206
|
+
pySimBlocks/gui/widgets/block_list.py,sha256=F-M13VtbgGsEjz5znkfoFnh-hcuGeF3WUK173V7yFN0,4998
|
|
207
|
+
pySimBlocks/gui/widgets/diagram_view.py,sha256=CqQzqTfW7v8aUQLgpgsgBCqnAIvBg7mH0vOkNXWQqog,13443
|
|
208
|
+
pySimBlocks/gui/widgets/toolbar_view.py,sha256=KlCd-O_H0RMIMZkZvYK4WcDrKtu88wE4ffBdbPU6vC8,6235
|
|
209
|
+
pySimBlocks/project/__init__.py,sha256=0zfDsE4Udf2Wa1_eidnBBr7DFe9loIvwpVelOU4rVO8,1713
|
|
210
|
+
pySimBlocks/project/build_model.py,sha256=xh8B4jW6DabXRnDNLHa97wRmogxyJQtV6NGWJgE-V7g,3798
|
|
211
|
+
pySimBlocks/project/generate_run_script.py,sha256=_NnCgzDWpQmBGAh7Ubv9eC0cZt89REnx_2xN3qRX58A,3665
|
|
212
|
+
pySimBlocks/project/generate_sofa_controller.py,sha256=fJ2LIJ_Z3D_dnXgIPJ5z7pP4tM5V0yEfjGOnWxYHWfo,7014
|
|
213
|
+
pySimBlocks/project/load_project_config.py,sha256=cmyXpbCivOkkXIQLOCBAU9NtXYQEXRU7zstj6DTLwhY,7182
|
|
214
|
+
pySimBlocks/project/load_simulation_config.py,sha256=VFrdu8sdwBP3gxZ9PVG5cZF-jXwzitcThDU0usEikzw,5505
|
|
215
|
+
pySimBlocks/project/load_simulator.py,sha256=td6xqbZSjVHLc8JQfOTPk5qD0BvEVF5WT3lPHK2VoQ0,1938
|
|
216
|
+
pySimBlocks/project/plot_from_config.py,sha256=vfCDd3-fN67yFPUtCiZ4Bd8nbWtJO5YrYcc-jj9qDUI,5810
|
|
217
|
+
pySimBlocks/project/pySimBlocks_blocks_index.yaml,sha256=rW9wx6dz9t-wG9h-NE08UhmaWdQM_lqVIXigtuS_uQY,3086
|
|
218
|
+
pySimBlocks/real_time/__init__.py,sha256=L8qDmJbnYk2kU-a_if0EuEFQ132XOvJI88qFV6KL_2w,1232
|
|
219
|
+
pySimBlocks/real_time/real_time_runner.py,sha256=mS-ZJdA70NHWcKwI-pdKZh3jYhaHBDLJH3-tgboeU9c,5458
|
|
220
|
+
pySimBlocks/tools/__init__.py,sha256=8_Azcqim-lux41SWyhlVWGx9fhFWjPT5SzbUYS7d41c,1135
|
|
221
|
+
pySimBlocks/tools/blocks_registry.py,sha256=iydb7dko6K6AtqbuJDbc5G4Ousykav1GJHf9Lub5Uh4,4196
|
|
222
|
+
pySimBlocks/tools/generate_blocks_index.py,sha256=qsSIRsfPtt3jEXZG5Dg44_K5xpCB2bTAmcP2Z4mk-Cw,4000
|
|
223
|
+
pysimblocks-0.1.0.dist-info/licenses/LICENSE.md,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
|
|
224
|
+
tests/blocks/controllers/test_pid.py,sha256=R7YNdAqpjGxnFS_mAHwB_leBz8vps_8iQd-FxvXYYGk,4607
|
|
225
|
+
tests/blocks/controllers/test_state_feedback.py,sha256=sei2PJNwPJ6PVfIAOOb3XnnSstaW4msaxjMiadB_yKI,6016
|
|
226
|
+
tests/blocks/observers/test_luenberger.py,sha256=Lw0OlLs1gLhh36qa1-cFrRklr9A-A0mZHLZIpD0VEZc,6725
|
|
227
|
+
tests/blocks/operators/test_algebraic_function.py,sha256=Urmrv5NXUfvuqQKlOtSgOnshbZsJmf8D1jVMxhf4pFg,7431
|
|
228
|
+
tests/blocks/operators/test_dead_zone.py,sha256=EDT8N9kRFwQhamSQYl-jEgvOC6tfMRj6MmNKXW3_TLE,3041
|
|
229
|
+
tests/blocks/operators/test_delay.py,sha256=2KLS-0cXt43UXE5XN2p1xqmr6c2NGkRgs1juRcQvwa0,5329
|
|
230
|
+
tests/blocks/operators/test_demux.py,sha256=OVZUeljxKyfMV-y8vvaRRJLMwFsXOjpiUsOyNQCW8qA,3025
|
|
231
|
+
tests/blocks/operators/test_discrete_derivator.py,sha256=5Gj_WC2yUz_ZSd35QvEw5pGPokQMIY2h9Ls2IZ9KbA0,5075
|
|
232
|
+
tests/blocks/operators/test_discrete_integrator.py,sha256=N8FMO359fJkq7_X4jvPBXAtk0x0Vx5SdF4hC4pjN8jk,5573
|
|
233
|
+
tests/blocks/operators/test_gain.py,sha256=4RBopLrto1LqnB0oIO-5WvPxofOMg8Q6TRicKwT4L30,5648
|
|
234
|
+
tests/blocks/operators/test_mux.py,sha256=Lys71QLWm48kdliUq3h3xSjJdRHgGpynOEIKyJMnkXs,2848
|
|
235
|
+
tests/blocks/operators/test_product.py,sha256=hLiLg_xr2tOfhfFOlpHrcFdxMw-fV_bAPJB1V760jBg,5777
|
|
236
|
+
tests/blocks/operators/test_rate_limiter.py,sha256=V62hRFnF9j57kJCwdPnVZeHnZsMjFg7qB-_Xer03yec,5163
|
|
237
|
+
tests/blocks/operators/test_saturation.py,sha256=4566kAZDdayFNtmhxBxgQB4MElbv0YPwmaE1BiNYQ8E,5382
|
|
238
|
+
tests/blocks/operators/test_sum.py,sha256=wOTRET5CY2hrCpRV-3TPnxW9D_2OlFHR2RpA9P9IKBA,5584
|
|
239
|
+
tests/blocks/operators/test_zero_order_hold.py,sha256=0qJn_9ffTL4Ixr4utFjOs6LUxEG21V-nNR4QhTEa3TE,3208
|
|
240
|
+
tests/blocks/sources/test_chirp.py,sha256=M6mj2CE4PPR09MrtzTcYCXZGuXK8C0aI0gc9GGlBWgI,4360
|
|
241
|
+
tests/blocks/sources/test_constant.py,sha256=HqdO-y3zy8LvTwgl78tS3uN_YijpU8-Wm_flui0wcuU,1938
|
|
242
|
+
tests/blocks/sources/test_file_source.py,sha256=ir1wNpZOOaIydMmQic3AV8N3rsHqK0eo_wdELNv2SE4,5358
|
|
243
|
+
tests/blocks/sources/test_function_source.py,sha256=KYE7oYWxhS9-4BnGAAMLh35WFWmRwCXn1DmnOb9R19g,3741
|
|
244
|
+
tests/blocks/sources/test_ramp.py,sha256=atxsz51oQSLMgd9kI6-wzxViQRMj1ib-7TP03OJb9jE,3552
|
|
245
|
+
tests/blocks/sources/test_sinusoidal.py,sha256=Zql-3wiXPjkDd_apzZ5kB6L0AvAxF-yDu047LaIUowg,3625
|
|
246
|
+
tests/blocks/sources/test_step.py,sha256=jofZ5rQ31t_DnrKqYuXgap92svwy2_eJkpULv7svPsU,2070
|
|
247
|
+
tests/blocks/sources/test_white_noise.py,sha256=d9TbgcwpHxYEL6clNbpBJAbHy08Uv82k8tSLpPCNprk,3376
|
|
248
|
+
tests/blocks/systems/test_linear_state_space.py,sha256=zbglAt6_P_VTnFR1rokYiSr9avd0PL42AVuQYfSI5jM,3612
|
|
249
|
+
tests/blocks/systems/test_polytopic_state_space.py,sha256=LCRlglO_pZ31VoguOQjAXV72s2kY0af1E3GVmNnmhfw,3694
|
|
250
|
+
tests/core/test_core_errors_and_determinism.py,sha256=mm_megCrAIx8IpreG9U4nNA1Ijp9wODYeVtE3_H2ny0,2515
|
|
251
|
+
tests/core/test_core_multirate_tasks.py,sha256=2Tp0c0Wik1Lz7lfQuIZeIiDUguuFLQu38yywj6js6jY,2741
|
|
252
|
+
tests/core/test_core_two_phase_and_propagation.py,sha256=f3pkGZisd2LL20-A8TMZf0J4Ln2tyyv3gdQ7QrcK6jE,3780
|
|
253
|
+
tests/gui/main_window_open_test.py,sha256=toZOX09_HoORMHeXPI2N_Z3vimy-SPcZg5G5Vsil_-0,3853
|
|
254
|
+
tests/gui/test_block_meta_param_cache.py,sha256=vo-oz8XqfFPuB877IOUdHxolOCIIB9Zzi6suPyhMncM,545
|
|
255
|
+
tests/gui/test_file_source_meta.py,sha256=hAvScPqPKv0vGJZy1xF1oyFgsqq-7Ru49Lvtjalu2Ng,679
|
|
256
|
+
tests/gui/test_function_source_meta.py,sha256=Rq1xSW_9qY0E3ej4j6UYSCGcqvfDBa96GcEYeOGYHG4,895
|
|
257
|
+
tests/regression/test_simulink_dc_motor.py,sha256=CoxJckIKTR6x89ST9HXb2ZOfViNIAN38I5D8i5aFfx4,7801
|
|
258
|
+
pysimblocks-0.1.0.dist-info/METADATA,sha256=0Bn7FfpD1mA9D17c83jfqs4J7fS6c2R9Y0NsCFR5n54,5712
|
|
259
|
+
pysimblocks-0.1.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
260
|
+
pysimblocks-0.1.0.dist-info/entry_points.txt,sha256=n7l2cIzly0z8W9KOES4rIU4H1jV-8NLKMmhFjYaSPyE,53
|
|
261
|
+
pysimblocks-0.1.0.dist-info/top_level.txt,sha256=dewg9n-HlEYSsW3-S9w-BDaPQATU6b_hh59OGZOoFaw,27
|
|
262
|
+
pysimblocks-0.1.0.dist-info/RECORD,,
|