digsim-logic-simulator 0.3.0__tar.gz → 0.7.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.
Potentially problematic release.
This version of digsim-logic-simulator might be problematic. Click here for more details.
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/LICENSE.md +1 -1
- {digsim-logic-simulator-0.3.0/src/digsim_logic_simulator.egg-info → digsim_logic_simulator-0.7.0}/PKG-INFO +17 -10
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/README.md +5 -0
- digsim_logic_simulator-0.7.0/pyproject.toml +83 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/__init__.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/__main__.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui/__init__.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui/_circuit_area.py +1 -6
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui/_component_selection.py +1 -3
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui/_main_window.py +1 -3
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui/_top_bar.py +2 -5
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui/_warning_dialog.py +1 -3
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/__init__.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/_bus_bit_object.py +2 -5
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/_buzzer_object.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/_component_context_menu.py +2 -2
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/_component_object.py +9 -11
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/_component_port_item.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/_dip_switch_object.py +2 -5
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/_gui_note_object.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/_gui_object_factory.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/_hexdigit_object.py +2 -2
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/_image_objects.py +2 -4
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/_label_object.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/_logic_analyzer_object.py +1 -2
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/_seven_segment_object.py +2 -4
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/_shortcut_objects.py +2 -4
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/_yosys_object.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/model/__init__.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/model/_model.py +15 -18
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/model/_model_components.py +12 -15
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/model/_model_objects.py +30 -26
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/model/_model_settings.py +1 -5
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/model/_model_shortcuts.py +3 -3
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/settings/__init__.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/settings/_component_settings.py +5 -7
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/settings/_gui_settings.py +1 -3
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/settings/_shortcut_dialog.py +1 -3
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/__init__.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/_circuit.py +21 -64
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/_waves_writer.py +1 -4
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/__init__.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_bus_bits.py +2 -2
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_button.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_buzzer.py +2 -2
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_clock.py +2 -2
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_dip_switch.py +2 -2
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_gates.py +7 -9
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_hexdigit.py +3 -3
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_ic.py +1 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_label_wire.py +4 -4
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_led.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_logic_analyzer.py +2 -2
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_note.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_on_off_switch.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_seven_segment.py +2 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_static_level.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_static_value.py +2 -2
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_yosys_atoms.py +1 -6
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_yosys_component.py +1 -4
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/atoms/__init__.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/atoms/_component.py +2 -44
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/atoms/_port.py +7 -18
- digsim_logic_simulator-0.7.0/src/digsim/storage_model/__init__.py +7 -0
- digsim_logic_simulator-0.7.0/src/digsim/storage_model/_app.py +53 -0
- digsim_logic_simulator-0.7.0/src/digsim/storage_model/_circuit.py +118 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/synth/__init__.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/synth/__main__.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/synth/_synthesis.py +10 -2
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/utils/__init__.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/utils/_yosys_netlist.py +1 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0/src/digsim_logic_simulator.egg-info}/PKG-INFO +17 -10
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim_logic_simulator.egg-info/SOURCES.txt +3 -0
- digsim_logic_simulator-0.7.0/src/digsim_logic_simulator.egg-info/requires.txt +6 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/tests/test_gates.py +2 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/tests/test_yosys_aldff.py +2 -2
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/tests/test_yosys_dff.py +2 -2
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/tests/test_yosys_dlatch.py +2 -2
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/tests/test_yosys_gates.py +2 -2
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/tests/test_yosys_latch.py +2 -2
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/tests/test_yosys_netlist.py +2 -1
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/tests/test_yosys_sdff.py +2 -2
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/tests/test_yosys_sr.py +3 -5
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/tests/test_yosys_synth.py +9 -7
- digsim-logic-simulator-0.3.0/pyproject.toml +0 -79
- digsim-logic-simulator-0.3.0/src/digsim_logic_simulator.egg-info/requires.txt +0 -5
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/MANIFEST.in +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/setup.cfg +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui/_utils.py +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/AND.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/Analyzer.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/BUF.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/Buzzer.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/Clock.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/DFF.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/DIP_SWITCH.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/FlipFlop.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/IC.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/LED_OFF.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/LED_ON.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/MUX.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/NAND.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/NOR.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/NOT.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/ONE.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/OR.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/PB.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/Switch_OFF.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/Switch_ON.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/XNOR.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/XOR.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/YOSYS.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/images/ZERO.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/images/app_icon.png +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/model/_model_new_wire.py +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_flip_flops.py +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_mem64kbyte.py +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/_memstdout.py +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/atoms/_digsim_exception.py +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/ic/74162.json +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/circuit/components/ic/7448.json +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim_logic_simulator.egg-info/dependency_links.txt +0 -0
- {digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim_logic_simulator.egg-info/top_level.txt +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: digsim-logic-simulator
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.0
|
|
4
4
|
Summary: Interactive Digital Logic Simulator
|
|
5
5
|
Author-email: Fredrik Andersson <freand@gmail.com>
|
|
6
6
|
Maintainer-email: Fredrik Andersson <freand@gmail.com>
|
|
7
7
|
License: The Clear BSD License
|
|
8
8
|
|
|
9
|
-
Copyright (c) 2023, Fredrik Andersson
|
|
9
|
+
Copyright (c) 2023-2024, Fredrik Andersson
|
|
10
10
|
All rights reserved.
|
|
11
11
|
|
|
12
12
|
Redistribution and use in source and binary forms, with or without
|
|
@@ -41,20 +41,22 @@ Project-URL: homepage, https://github.com/freand76/digsim
|
|
|
41
41
|
Keywords: educational,simulation,digital
|
|
42
42
|
Classifier: Development Status :: 5 - Production/Stable
|
|
43
43
|
Classifier: Programming Language :: Python :: 3
|
|
44
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
45
44
|
Classifier: Programming Language :: Python :: 3.9
|
|
46
45
|
Classifier: Programming Language :: Python :: 3.10
|
|
47
46
|
Classifier: Programming Language :: Python :: 3.11
|
|
48
47
|
Classifier: Programming Language :: Python :: 3.12
|
|
48
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
49
49
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
50
|
-
Requires-Python: >=3.
|
|
50
|
+
Requires-Python: >=3.9
|
|
51
51
|
Description-Content-Type: text/markdown
|
|
52
52
|
License-File: LICENSE.md
|
|
53
|
-
Requires-Dist: pyvcd>=0.
|
|
54
|
-
Requires-Dist: pyside6>=6.
|
|
55
|
-
Requires-Dist: pexpect==4.
|
|
56
|
-
Requires-Dist:
|
|
57
|
-
Requires-Dist:
|
|
53
|
+
Requires-Dist: pyvcd>=0.4.1
|
|
54
|
+
Requires-Dist: pyside6>=6.9.0
|
|
55
|
+
Requires-Dist: pexpect==4.9.0
|
|
56
|
+
Requires-Dist: pydantic==2.11.4
|
|
57
|
+
Requires-Dist: qtawesome==1.4.0
|
|
58
|
+
Requires-Dist: yowasp-yosys==0.53.0.0.post912
|
|
59
|
+
Dynamic: license-file
|
|
58
60
|
|
|
59
61
|
# DigSim - Interactive Digital Logic Simulator
|
|
60
62
|
|
|
@@ -135,6 +137,11 @@ Then the following package must be installed:
|
|
|
135
137
|
> gtkwave sr.vcd
|
|
136
138
|
```
|
|
137
139
|
|
|
140
|
+
### Examples of writing pytest/python test benches for synthesized verilog code
|
|
141
|
+
```
|
|
142
|
+
> pytest examples/pytest_tb
|
|
143
|
+
```
|
|
144
|
+
|
|
138
145
|
## Yosys synthesis helper tool
|
|
139
146
|
|
|
140
147
|
```
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "digsim-logic-simulator"
|
|
7
|
+
description = "Interactive Digital Logic Simulator"
|
|
8
|
+
version = "0.7.0"
|
|
9
|
+
authors = [{name = "Fredrik Andersson", email = "freand@gmail.com"}]
|
|
10
|
+
maintainers = [{name = "Fredrik Andersson", email = "freand@gmail.com"}]
|
|
11
|
+
readme = "README.md"
|
|
12
|
+
license = { file = "LICENSE.md" }
|
|
13
|
+
urls = { homepage = "https://github.com/freand76/digsim" }
|
|
14
|
+
|
|
15
|
+
classifiers = [
|
|
16
|
+
"Development Status :: 5 - Production/Stable",
|
|
17
|
+
"Programming Language :: Python :: 3",
|
|
18
|
+
"Programming Language :: Python :: 3.9",
|
|
19
|
+
"Programming Language :: Python :: 3.10",
|
|
20
|
+
"Programming Language :: Python :: 3.11",
|
|
21
|
+
"Programming Language :: Python :: 3.12",
|
|
22
|
+
"Programming Language :: Python :: 3.13",
|
|
23
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
requires-python = ">=3.9"
|
|
27
|
+
dependencies = [
|
|
28
|
+
"pyvcd>=0.4.1",
|
|
29
|
+
"pyside6>=6.9.0",
|
|
30
|
+
"pexpect==4.9.0",
|
|
31
|
+
"pydantic==2.11.4",
|
|
32
|
+
"qtawesome==1.4.0",
|
|
33
|
+
"yowasp-yosys==0.53.0.0.post912",
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
keywords = ["educational", "simulation", "digital"]
|
|
37
|
+
|
|
38
|
+
[tool.ruff]
|
|
39
|
+
line-length = 99
|
|
40
|
+
target-version = "py39"
|
|
41
|
+
|
|
42
|
+
show-fixes = true
|
|
43
|
+
output-format = "full"
|
|
44
|
+
|
|
45
|
+
src = ["src"]
|
|
46
|
+
namespace-packages = ["src/digsim"]
|
|
47
|
+
|
|
48
|
+
[tool.ruff.lint]
|
|
49
|
+
# "extend" here adds to the ruff defaults, rather than replacing.
|
|
50
|
+
# Q = flake8-quotes, TID = flake8-tidy-imports, I = isort, FA = flake8-future-annotations
|
|
51
|
+
extend-select = ["Q", "TID", "I", "FA"]
|
|
52
|
+
# E501 = "line too long". Handled by black.
|
|
53
|
+
extend-ignore = ["E501"]
|
|
54
|
+
|
|
55
|
+
[tool.ruff.lint.per-file-ignores]
|
|
56
|
+
"__init__.py" = ["F401"]
|
|
57
|
+
|
|
58
|
+
[tool.ruff.lint.flake8-tidy-imports]
|
|
59
|
+
ban-relative-imports = "parents"
|
|
60
|
+
|
|
61
|
+
[tool.ruff.lint.isort]
|
|
62
|
+
lines-after-imports = 2
|
|
63
|
+
|
|
64
|
+
known-third-party = [
|
|
65
|
+
"pexpect",
|
|
66
|
+
"pytest",
|
|
67
|
+
"pyvcd",
|
|
68
|
+
"qtawesome",
|
|
69
|
+
"yowasp-yosys",
|
|
70
|
+
]
|
|
71
|
+
section-order = [
|
|
72
|
+
"future",
|
|
73
|
+
"standard-library",
|
|
74
|
+
"third-party",
|
|
75
|
+
"PySide6",
|
|
76
|
+
"pyqtgraph",
|
|
77
|
+
"first-party",
|
|
78
|
+
"local-folder",
|
|
79
|
+
]
|
|
80
|
+
|
|
81
|
+
[tool.ruff.lint.isort.sections]
|
|
82
|
+
"PySide6" = ["PySide6"]
|
|
83
|
+
"pyqtgraph" = ["pyqtgraph"]
|
{digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui/_circuit_area.py
RENAMED
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2024
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
4
|
"""The circuit area and component widget"""
|
|
5
5
|
|
|
6
|
-
# pylint: disable=unused-argument
|
|
7
|
-
# pylint: disable=useless-parent-delegation
|
|
8
|
-
# pylint: disable=too-few-public-methods
|
|
9
|
-
|
|
10
6
|
from functools import partial
|
|
11
7
|
|
|
12
8
|
from PySide6.QtCore import QPoint, QPointF, QRect, QRectF, Qt, QTimer
|
|
@@ -23,7 +19,6 @@ from digsim.app.settings import ComponentSettingsDialog
|
|
|
23
19
|
|
|
24
20
|
|
|
25
21
|
class WirePartGraphicsItem(QGraphicsRectItem):
|
|
26
|
-
|
|
27
22
|
"""A part of a wire graphcis item"""
|
|
28
23
|
|
|
29
24
|
CLOSE_TO_WIRE_MARGIN = 10
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2024
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
4
|
"""Module for the component selection classes"""
|
|
5
5
|
|
|
6
|
-
# pylint: disable=too-few-public-methods
|
|
7
|
-
|
|
8
6
|
from functools import partial
|
|
9
7
|
|
|
10
8
|
from PySide6.QtCore import QMimeData, QSize, Qt, QTimer
|
{digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui/_main_window.py
RENAMED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2024
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
4
|
"""The main window and widgets of the digsim gui application"""
|
|
5
5
|
|
|
6
|
-
# pylint: disable=too-few-public-methods
|
|
7
|
-
|
|
8
6
|
from PySide6.QtCore import Qt
|
|
9
7
|
from PySide6.QtGui import QKeySequence, QShortcut
|
|
10
8
|
from PySide6.QtWidgets import (
|
{digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui/_top_bar.py
RENAMED
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2024
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
4
|
"""The top bar of the main window/gui application"""
|
|
5
5
|
|
|
6
|
-
# pylint: disable=too-few-public-methods
|
|
7
|
-
# pylint: disable=too-many-instance-attributes
|
|
8
|
-
|
|
9
6
|
from pathlib import Path
|
|
10
7
|
|
|
11
8
|
import qtawesome as qta
|
|
@@ -262,7 +259,7 @@ class LoadSaveWidget(QFrame):
|
|
|
262
259
|
self._redo_button.setToolTip("Redo")
|
|
263
260
|
self.layout().addWidget(self._redo_button)
|
|
264
261
|
self._settings_button = QPushButton("", self)
|
|
265
|
-
self._settings_button.setIcon(qta.icon("
|
|
262
|
+
self._settings_button.setIcon(qta.icon("mdi.cog"))
|
|
266
263
|
self._settings_button.clicked.connect(self._settings_dialog)
|
|
267
264
|
self._settings_button.setToolTip("Settings")
|
|
268
265
|
self.layout().addWidget(self._settings_button)
|
{digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui/_warning_dialog.py
RENAMED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2024
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
4
|
"""A warning dialog"""
|
|
5
5
|
|
|
6
|
-
# pylint: disable=too-few-public-methods
|
|
7
|
-
|
|
8
6
|
from PySide6.QtCore import QSize, Qt
|
|
9
7
|
from PySide6.QtWidgets import (
|
|
10
8
|
QDialog,
|
{digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/gui_objects/__init__.py
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Copyright (c) Fredrik Andersson, 2023
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
|
-
"""
|
|
4
|
+
"""All classes within digsim.app.gui_object namespace"""
|
|
5
5
|
|
|
6
6
|
from ._component_object import ComponentObject # noqa: F401
|
|
7
7
|
from ._gui_object_factory import get_class_by_name as class_factory # noqa: F401
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2024
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
|
-
"""
|
|
4
|
+
"""A hexdigit component placed in the GUI"""
|
|
5
5
|
|
|
6
6
|
from PySide6.QtCore import QPoint, QSize, Qt
|
|
7
7
|
from PySide6.QtGui import QPen
|
|
@@ -9,9 +9,6 @@ from PySide6.QtGui import QPen
|
|
|
9
9
|
from ._component_object import ComponentObject
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
# pylint: disable=too-many-arguments
|
|
13
|
-
|
|
14
|
-
|
|
15
12
|
class BusBitsObject(ComponentObject):
|
|
16
13
|
"""The class for a bus/bit component placed in the GUI"""
|
|
17
14
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Copyright (c) Fredrik Andersson, 2023
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
|
-
"""
|
|
4
|
+
"""A component context menu"""
|
|
5
5
|
|
|
6
6
|
from PySide6.QtGui import QAction
|
|
7
7
|
from PySide6.QtWidgets import QMenu
|
|
@@ -58,7 +58,7 @@ class ComponentContextMenu(QMenu):
|
|
|
58
58
|
return self._menu_action.text() if self._menu_action is not None else ""
|
|
59
59
|
|
|
60
60
|
def _delete(self):
|
|
61
|
-
self._component_object.
|
|
61
|
+
self._component_object.setSelected(True)
|
|
62
62
|
self._app_model.objects.delete_selected()
|
|
63
63
|
|
|
64
64
|
def _raise(self):
|
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2024
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
# pylint: disable=unused-argument
|
|
7
|
-
# pylint: disable=too-many-public-methods
|
|
8
|
-
# pylint: disable=too-many-instance-attributes
|
|
9
|
-
# pylint: disable=too-many-arguments
|
|
4
|
+
"""A component placed in the GUI"""
|
|
10
5
|
|
|
11
6
|
import abc
|
|
12
7
|
|
|
@@ -14,6 +9,8 @@ from PySide6.QtCore import QPoint, QRect, QSize, Qt
|
|
|
14
9
|
from PySide6.QtGui import QFont, QFontMetrics, QPen
|
|
15
10
|
from PySide6.QtWidgets import QGraphicsItem, QGraphicsRectItem
|
|
16
11
|
|
|
12
|
+
from digsim.storage_model import GuiPositionDataClass
|
|
13
|
+
|
|
17
14
|
from ._component_context_menu import ComponentContextMenu
|
|
18
15
|
from ._component_port_item import PortGraphicsItem
|
|
19
16
|
|
|
@@ -154,7 +151,7 @@ class ComponentObject(QGraphicsRectItem):
|
|
|
154
151
|
if port.width == 1:
|
|
155
152
|
self._port_dict[port]["name"] = port.name()
|
|
156
153
|
else:
|
|
157
|
-
self._port_dict[port]["name"] = f"{port.name()}[{port.width-1}:0]"
|
|
154
|
+
self._port_dict[port]["name"] = f"{port.name()}[{port.width - 1}:0]"
|
|
158
155
|
item = PortGraphicsItem(self._app_model, self, port)
|
|
159
156
|
self._port_dict[port]["item"] = item
|
|
160
157
|
self.update_ports()
|
|
@@ -370,6 +367,7 @@ class ComponentObject(QGraphicsRectItem):
|
|
|
370
367
|
"""Set zlevel"""
|
|
371
368
|
self.setZValue(level)
|
|
372
369
|
|
|
373
|
-
def
|
|
374
|
-
|
|
375
|
-
|
|
370
|
+
def to_gui_dataclass(self):
|
|
371
|
+
return GuiPositionDataClass(
|
|
372
|
+
x=int(self._save_pos.x()), y=int(self._save_pos.y()), z=int(self.zlevel)
|
|
373
|
+
)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2024
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
|
-
"""
|
|
4
|
+
"""A hexdigit component placed in the GUI"""
|
|
5
5
|
|
|
6
6
|
from PySide6.QtCore import QPoint, QRect, Qt
|
|
7
7
|
from PySide6.QtGui import QFont, QPen
|
|
@@ -9,9 +9,6 @@ from PySide6.QtGui import QFont, QPen
|
|
|
9
9
|
from ._image_objects import ImageObject
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
# pylint: disable=too-many-arguments
|
|
13
|
-
|
|
14
|
-
|
|
15
12
|
class DipSwitchObject(ImageObject):
|
|
16
13
|
"""The class for a bus/bit component placed in the GUI"""
|
|
17
14
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Copyright (c) Fredrik Andersson, 2023
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
|
-
"""
|
|
4
|
+
"""A hexdigit component placed in the GUI"""
|
|
5
5
|
|
|
6
6
|
from ._component_object import ComponentObject
|
|
7
7
|
from ._seven_segment_object import SevenSegmentObject
|
|
@@ -22,7 +22,7 @@ class HexDigitObject(SevenSegmentObject):
|
|
|
22
22
|
def setup_size(self):
|
|
23
23
|
"""Setup the size of the component"""
|
|
24
24
|
self.digits = self.component.get_digits()
|
|
25
|
-
str_pixels_w, _ = self.get_string_metrics(f"val[{4*self.digits-1}:0]")
|
|
25
|
+
str_pixels_w, _ = self.get_string_metrics(f"val[{4 * self.digits - 1}:0]")
|
|
26
26
|
self.digit_left = self.inport_x_pos() + str_pixels_w + self.PORT_TO_RECT_MARGIN
|
|
27
27
|
self.digit_top = self.RECT_TO_DIGIT_RECT_MARGIN
|
|
28
28
|
self.width = (
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2024
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
# pylint: disable=too-many-arguments
|
|
4
|
+
"""A component with an image as symbol the GUI"""
|
|
7
5
|
|
|
8
6
|
from pathlib import Path
|
|
9
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Copyright (c) Fredrik Andersson, 2023
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
|
-
"""
|
|
4
|
+
"""A Logic Analyzer component placed in the GUI"""
|
|
5
5
|
|
|
6
6
|
from PySide6.QtCore import QPoint, QRect, Qt
|
|
7
7
|
from PySide6.QtGui import QPainterPath, QPen
|
|
@@ -23,7 +23,6 @@ class LogicAnalyzerObject(ImageObject):
|
|
|
23
23
|
self.update_ports()
|
|
24
24
|
|
|
25
25
|
def paint_component(self, painter):
|
|
26
|
-
|
|
27
26
|
self.paint_component_base(painter)
|
|
28
27
|
painter.setBrush(Qt.SolidPattern)
|
|
29
28
|
painter.setBrush(Qt.black)
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2024
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
# pylint: disable=too-many-arguments
|
|
4
|
+
"""A 7-segment component placed in the GUI"""
|
|
7
5
|
|
|
8
6
|
from PySide6.QtCore import QPoint, Qt
|
|
9
7
|
from PySide6.QtGui import QPainterPath
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2024
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
# pylint: disable=too-few-public-methods
|
|
4
|
+
"""A button component with an image as symbol the GUI"""
|
|
7
5
|
|
|
8
6
|
from functools import partial
|
|
9
7
|
|
{digsim-logic-simulator-0.3.0 → digsim_logic_simulator-0.7.0}/src/digsim/app/model/_model.py
RENAMED
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2024
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
|
-
"""
|
|
4
|
+
"""An application model for a GUI simulated circuit"""
|
|
5
5
|
|
|
6
|
-
# pylint: disable=too-many-instance-attributes
|
|
7
|
-
|
|
8
|
-
import json
|
|
9
6
|
import queue
|
|
10
7
|
import time
|
|
11
8
|
from pathlib import Path
|
|
@@ -14,6 +11,7 @@ from PySide6.QtCore import QThread, Signal
|
|
|
14
11
|
|
|
15
12
|
from digsim.app.gui_objects import ComponentObject
|
|
16
13
|
from digsim.circuit.components.atoms import Component
|
|
14
|
+
from digsim.storage_model import AppFileDataClass
|
|
17
15
|
|
|
18
16
|
from ._model_objects import ModelObjects
|
|
19
17
|
from ._model_settings import ModelSettings
|
|
@@ -157,28 +155,27 @@ class AppModel(QThread):
|
|
|
157
155
|
def save_circuit(self, path):
|
|
158
156
|
"""Save the circuit with GUI information"""
|
|
159
157
|
circuit_folder = str(Path(path).parent)
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
158
|
+
model_dataclass = self.objects.circuit_to_model(circuit_folder)
|
|
159
|
+
appfile_dataclass = AppFileDataClass(
|
|
160
|
+
circuit=model_dataclass.circuit,
|
|
161
|
+
gui=model_dataclass.gui,
|
|
162
|
+
shortcuts=self.shortcuts.to_dict(),
|
|
163
|
+
settings=self.settings.get_all(),
|
|
164
|
+
)
|
|
165
|
+
appfile_dataclass.save(path)
|
|
168
166
|
self._changed = False
|
|
169
167
|
self.sig_control_notify.emit()
|
|
170
168
|
|
|
171
169
|
def load_circuit(self, path):
|
|
172
170
|
"""Load a circuit with GUI information"""
|
|
173
171
|
self._model_clear()
|
|
174
|
-
|
|
175
|
-
circuit_dict = json.load(json_file)
|
|
172
|
+
app_file_dc = AppFileDataClass.load(path)
|
|
176
173
|
circuit_folder = str(Path(path).parent)
|
|
177
174
|
if len(circuit_folder) == 0:
|
|
178
175
|
circuit_folder = "."
|
|
179
|
-
exception_str_list = self.objects.
|
|
180
|
-
self.shortcuts.from_dict(
|
|
181
|
-
self.settings.from_dict(
|
|
176
|
+
exception_str_list = self.objects.model_to_circuit(app_file_dc, circuit_folder)
|
|
177
|
+
self.shortcuts.from_dict(app_file_dc.shortcuts)
|
|
178
|
+
self.settings.from_dict(app_file_dc.settings)
|
|
182
179
|
self.model_init()
|
|
183
180
|
self._changed = False
|
|
184
181
|
self.objects.reset_undo_stack()
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) Fredrik Andersson, 2023
|
|
1
|
+
# Copyright (c) Fredrik Andersson, 2023-2024
|
|
2
2
|
# All rights reserved
|
|
3
3
|
|
|
4
4
|
"""Handle component objects in the model"""
|
|
@@ -7,6 +7,7 @@ import digsim.circuit.components
|
|
|
7
7
|
from digsim.app.gui_objects import ComponentObject
|
|
8
8
|
from digsim.circuit.components import Buzzer
|
|
9
9
|
from digsim.circuit.components.atoms import CallbackComponent
|
|
10
|
+
from digsim.storage_model import GuiPositionDataClass
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
class ModelComponents:
|
|
@@ -149,20 +150,16 @@ class ModelComponents:
|
|
|
149
150
|
self._circuit.delete_component(component_object.component)
|
|
150
151
|
self._app_model.sig_delete_component.emit(component_object)
|
|
151
152
|
|
|
152
|
-
def
|
|
153
|
+
def add_gui_positions(self, gui_dc_dict):
|
|
153
154
|
"""Create model components from circuit_dict"""
|
|
154
155
|
for comp in self._circuit.get_toplevel_components():
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
def get_circuit_dict(self):
|
|
164
|
-
"""Create model components dict"""
|
|
165
|
-
model_components_dict = {"gui": {}}
|
|
156
|
+
gui_dc = gui_dc_dict.get(comp.name(), GuiPositionDataClass())
|
|
157
|
+
component_object = self._add_object(comp, gui_dc.x, gui_dc.y)
|
|
158
|
+
component_object.zlevel = gui_dc.z
|
|
159
|
+
|
|
160
|
+
def get_gui_dict(self):
|
|
161
|
+
"""Return gui dict from component objects"""
|
|
162
|
+
gui_dict = {}
|
|
166
163
|
for comp, comp_object in self.get_dict().items():
|
|
167
|
-
|
|
168
|
-
return
|
|
164
|
+
gui_dict[comp.name()] = comp_object.to_gui_dataclass()
|
|
165
|
+
return gui_dict
|