bec-widgets 0.52.0__py3-none-any.whl → 0.53.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.
- .git_hooks/pre-commit +3 -0
- .gitignore +177 -0
- .gitlab/issue_templates/bug_report_template.md +17 -0
- .gitlab/issue_templates/documentation_update_template.md +27 -0
- .gitlab/issue_templates/feature_request_template.md +40 -0
- .gitlab/merge_request_templates/default.md +28 -0
- .gitlab-ci.yml +225 -0
- .pylintrc +581 -0
- .readthedocs.yaml +25 -0
- CHANGELOG.md +176 -0
- PKG-INFO +33 -0
- bec_widgets-0.52.0.dist-info/METADATA → README.md +6 -42
- bec_widgets/cli/client.py +132 -17
- bec_widgets/cli/client_utils.py +1 -0
- bec_widgets/cli/generate_cli.py +1 -0
- bec_widgets/cli/rpc_register.py +4 -0
- bec_widgets/cli/rpc_wigdet_handler.py +2 -3
- bec_widgets/examples/modular_app/modular.ui +92 -0
- bec_widgets/examples/modular_app/modular_app.py +197 -0
- bec_widgets/examples/motor_movement/motor_control_compilations.py +1 -1
- bec_widgets/examples/motor_movement/motor_example.py +3 -12
- bec_widgets/utils/bec_connector.py +7 -0
- bec_widgets/utils/bec_dispatcher.py +1 -3
- bec_widgets/utils/bec_table.py +1 -0
- bec_widgets/utils/container_utils.py +3 -0
- bec_widgets/utils/crosshair.py +1 -0
- bec_widgets/utils/entry_validator.py +2 -0
- bec_widgets/utils/layout_manager.py +4 -0
- bec_widgets/utils/widget_io.py +5 -0
- bec_widgets/utils/yaml_dialog.py +2 -0
- bec_widgets/validation/monitor_config_validator.py +2 -1
- bec_widgets/widgets/dock/dock_area.py +6 -4
- bec_widgets/widgets/figure/figure.py +15 -15
- bec_widgets/widgets/monitor/config_dialog.py +3 -19
- bec_widgets/widgets/monitor/example_configs/config_device.yaml +60 -0
- bec_widgets/widgets/monitor/example_configs/config_scans.yaml +92 -0
- bec_widgets/widgets/motor_map/motor_map.py +3 -14
- bec_widgets/widgets/plots/image.py +41 -0
- bec_widgets/widgets/plots/motor_map.py +16 -9
- bec_widgets/widgets/plots/plot_base.py +10 -0
- bec_widgets/widgets/plots/waveform.py +31 -0
- bec_widgets/widgets/scan_control/scan_control.py +11 -5
- bec_widgets/widgets/toolbar/toolbar.py +1 -0
- bec_widgets-0.53.0.dist-info/METADATA +33 -0
- bec_widgets-0.53.0.dist-info/RECORD +156 -0
- {bec_widgets-0.52.0.dist-info → bec_widgets-0.53.0.dist-info}/WHEEL +1 -2
- bec_widgets-0.53.0.dist-info/licenses/LICENSE +29 -0
- docs/Makefile +20 -0
- docs/_templates/custom-class-template.rst +34 -0
- docs/_templates/custom-module-template.rst +66 -0
- docs/conf.py +81 -0
- docs/developer/developer.md +26 -0
- docs/developer/reference.md +10 -0
- docs/index.md +39 -0
- docs/introduction/introduction.md +18 -0
- docs/make.bat +35 -0
- docs/requirements.txt +10 -0
- docs/user/apps/modular_app.md +6 -0
- docs/user/apps/motor_app.md +34 -0
- docs/user/apps/motor_app_10fps.gif +0 -0
- docs/user/apps/plot_app.md +6 -0
- docs/user/apps.md +39 -0
- docs/user/customisation.md +13 -0
- docs/user/installation.md +46 -0
- docs/user/user.md +38 -0
- docs/user/widgets/motor.gif +0 -0
- docs/user/widgets/scatter_2D.gif +0 -0
- docs/user/widgets/w1D.gif +0 -0
- docs/user/widgets.md +41 -0
- pyproject.toml +94 -0
- tests/unit_tests/test_bec_dispatcher.py +3 -26
- tests/unit_tests/test_bec_figure.py +1 -5
- tests/unit_tests/test_bec_motor_map.py +1 -4
- tests/unit_tests/test_config_dialog.py +1 -5
- tests/unit_tests/test_configs/config_device.yaml +33 -0
- tests/unit_tests/test_configs/config_device_no_entry.yaml +27 -0
- tests/unit_tests/test_configs/config_scan.yaml +82 -0
- tests/unit_tests/test_motor_control.py +1 -1
- tests/unit_tests/test_motor_map.py +5 -20
- tests/unit_tests/test_stream_plot.py +2 -12
- bec_widgets/utils/ctrl_c.py +0 -39
- bec_widgets-0.52.0.dist-info/RECORD +0 -115
- bec_widgets-0.52.0.dist-info/top_level.txt +0 -2
- /bec_widgets-0.52.0.dist-info/LICENSE → /LICENSE +0 -0
- /bec_widgets/{simulations/__init__.py → examples/modular_app/___init__.py} +0 -0
CHANGELOG.md
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
# CHANGELOG
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
## v0.53.0 (2024-05-09)
|
6
|
+
|
7
|
+
### Ci
|
8
|
+
|
9
|
+
* ci: use formatter config of toml file ([`5cc816d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/5cc816d0af73e20c648e044a027c589704ab1625))
|
10
|
+
|
11
|
+
### Documentation
|
12
|
+
|
13
|
+
* docs: update install instructions ([`57ee735`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/57ee735e5c2436d45a285507cdc939daa20e8e8f))
|
14
|
+
|
15
|
+
### Feature
|
16
|
+
|
17
|
+
* feat: moved to pyproject.toml; closes #162 ([`c86ce30`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/c86ce302a964d71ee631f0817609ab5aa0e3ab0f))
|
18
|
+
|
19
|
+
### Fix
|
20
|
+
|
21
|
+
* fix: fixed semver job and upgraded to v9 ([`32e1a9d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/32e1a9d8472eb1c25d30697d407a8ffecd04e75d))
|
22
|
+
|
23
|
+
### Refactor
|
24
|
+
|
25
|
+
* refactor: applied formatter ([`4117fd7`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/4117fd7b5b2090ff4fb7ad9e0d92cc87cd13ed5f))
|
26
|
+
|
27
|
+
|
28
|
+
## v0.52.1 (2024-05-08)
|
29
|
+
|
30
|
+
### Fix
|
31
|
+
|
32
|
+
* fix(docstrings): docstrings formating fixed for sphinx to properly format readdocs ([`7f2f7cd`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/7f2f7cd07a14876617cd83cedde8c281fdc52c3a))
|
33
|
+
|
34
|
+
|
35
|
+
## v0.52.0 (2024-05-07)
|
36
|
+
|
37
|
+
### Ci
|
38
|
+
|
39
|
+
* ci: fixed support for child pipelines ([`e65c7f3`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/e65c7f3be895ada407bd358edf67d569d2cab08e))
|
40
|
+
|
41
|
+
### Feature
|
42
|
+
|
43
|
+
* feat(utils/layout_manager): added GridLayoutManager to extend functionalities of native QGridLayout ([`fcd6ef0`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/fcd6ef0975dc872f69c9d6fb2b8a1ad04a423aae))
|
44
|
+
|
45
|
+
* feat(widget/dock): BECDock and BECDock area for dockable windows ([`d8ff8af`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/d8ff8afcd474660a6069bbdab05f10a65f221727))
|
46
|
+
|
47
|
+
### Fix
|
48
|
+
|
49
|
+
* fix(widgets/dock): BECDockArea close overwrites the default pyqtgraph Container close + minor improvements ([`ceae979`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/ceae979f375ecc33c5c97148f197655c1ca57b6c))
|
50
|
+
|
51
|
+
### Refactor
|
52
|
+
|
53
|
+
* refactor(widget/plots): WidgetConfig changed to SubplotConfig ([`03fa1f2`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/03fa1f26d0fa6b58ed05556fb2438d1e62f6c107))
|
54
|
+
|
55
|
+
|
56
|
+
## v0.51.0 (2024-05-07)
|
57
|
+
|
58
|
+
### Build
|
59
|
+
|
60
|
+
* build(cli): changed repo name to bec_widgets ([`799ea55`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/799ea554de9a7f3720d100be4886a63f02c6a390))
|
61
|
+
|
62
|
+
* build(setup): fakeredis added to dev env ([`df32350`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/df323504fea024a97304d96c2e39e61450714069))
|
63
|
+
|
64
|
+
* build(setup): PyQt6 version is set to 6.7 ([`0ab8aa3`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/0ab8aa3a2fe51b5c38b25fca44c1c422bb42478d))
|
65
|
+
|
66
|
+
### Ci
|
67
|
+
|
68
|
+
* ci: added rule for parent-child pipelines ([`e085125`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/e0851250eecb85503db929d37f75d2ba366308a6))
|
69
|
+
|
70
|
+
### Feature
|
71
|
+
|
72
|
+
* feat(utils): added plugin helper to find and load ([`5ece269`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/5ece269adb0e9b0c2a468f1dfbaa6212e86d3561))
|
73
|
+
|
74
|
+
|
75
|
+
## v0.50.2 (2024-04-30)
|
76
|
+
|
77
|
+
### Fix
|
78
|
+
|
79
|
+
* fix: 'disconnect_slot' has to be symmetric with 'connect_slot' regarding QtThreadSafeCallback ([`0dfcaa4`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/0dfcaa4b708948af0a40ec7cf34d03ff1e96ffac))
|
80
|
+
|
81
|
+
|
82
|
+
## v0.50.1 (2024-04-29)
|
83
|
+
|
84
|
+
### Fix
|
85
|
+
|
86
|
+
* fix(cli): BECFigure takes the port to connect to redis from the current BECClient, supporting plugins ([`57cb136`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/57cb136a098e87a452414bf44e627edb562f6799))
|
87
|
+
|
88
|
+
|
89
|
+
## v0.50.0 (2024-04-29)
|
90
|
+
|
91
|
+
### Feature
|
92
|
+
|
93
|
+
* feat(plots): universal cleanup and remove also for children items ([`381d713`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/381d713837bb9217c58ba1d8b89691aa35c9f5ec))
|
94
|
+
|
95
|
+
* feat(rpc/rpc_register): singleton rpc register for all rpc connections for session ([`a898e7e`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/a898e7e4f14e9ae854703dddbd1eb8c50cb640ff))
|
96
|
+
|
97
|
+
### Fix
|
98
|
+
|
99
|
+
* fix(widgets/figure): access pattern changed for getting widgets by coordinates for rpc ([`13c018a`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/13c018a79704a7497c140df57179d294e43ecffa))
|
100
|
+
|
101
|
+
* fix(plots): cleanup policy reviewed for children items ([`8f20a0b`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/8f20a0b3b1b5dd117b36b45645717190b9ee9cbf))
|
102
|
+
|
103
|
+
* fix(rpc/client_utils): getoutput more transparent + error handling ([`6b6a6b2`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/6b6a6b2249f24d3d02bd5fcd7ef1c63ed794c304))
|
104
|
+
|
105
|
+
* fix(rpc_register): thread lock for listign all connections ([`2ca3267`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/2ca32675ec3f00137e2140259db51f6e5aa7bb71))
|
106
|
+
|
107
|
+
### Test
|
108
|
+
|
109
|
+
* test(cli/rpc_register): e2e RPCRegister ([`4f261be`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/4f261be4c7cfe54501443d031f9266f4f838f6e2))
|
110
|
+
|
111
|
+
* test(cli/rpc_register): rpc_register tests added ([`40eb75f`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/40eb75f85a4d99d498b086a37e799276a9d2ac3f))
|
112
|
+
|
113
|
+
|
114
|
+
## v0.49.1 (2024-04-26)
|
115
|
+
|
116
|
+
### Build
|
117
|
+
|
118
|
+
* build(pyqt6): fixing PyQt6-Qt6 package to 6.6.3 ([`a222298`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/a22229849cbb57c15e4c1bae02d7e52e672f8c4c))
|
119
|
+
|
120
|
+
### Fix
|
121
|
+
|
122
|
+
* fix(widgets/editor): qscintilla editor removed ([`ab85374`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/ab8537483da6c87cb9a0b0f01706208c964f292d))
|
123
|
+
|
124
|
+
|
125
|
+
## v0.49.0 (2024-04-24)
|
126
|
+
|
127
|
+
### Feature
|
128
|
+
|
129
|
+
* feat(rpc/client_utils): timeout for rpc response ([`6500a00`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/6500a00682a2a7ca535a138bd9496ed8470856a8))
|
130
|
+
|
131
|
+
### Fix
|
132
|
+
|
133
|
+
* fix(rpc/client_utils): close clean up policy for BECFigure ([`9602085`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/9602085f82cbc983f89b5bfe48bf35f08438fa87))
|
134
|
+
|
135
|
+
|
136
|
+
## v0.48.0 (2024-04-24)
|
137
|
+
|
138
|
+
### Feature
|
139
|
+
|
140
|
+
* feat(cli): added auto updates plugin support ([`6238693`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/6238693ffb44b47a56b969bc4129f2af7a2c04fe))
|
141
|
+
|
142
|
+
|
143
|
+
## v0.47.0 (2024-04-23)
|
144
|
+
|
145
|
+
### Feature
|
146
|
+
|
147
|
+
* feat(utils/thread_checker): util class to check the thread leakage for closeEvent in qt ([`71cb80d`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/71cb80d544c5f4ef499379a431ce0c17907c7ce8))
|
148
|
+
|
149
|
+
### Refactor
|
150
|
+
|
151
|
+
* refactor(utils/container_utils): part of the logic regarding locating widgets moved from BECFigure to utility class ([`77ff796`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/77ff7962cc91bce15d1c91b67b75b66fbea612c3))
|
152
|
+
|
153
|
+
|
154
|
+
## v0.46.7 (2024-04-21)
|
155
|
+
|
156
|
+
### Fix
|
157
|
+
|
158
|
+
* fix(plot/image): monitors are now validated with current bec session ([`67a99a1`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/67a99a1a19c261f9a1f09635f274cd9fbfe53639))
|
159
|
+
|
160
|
+
|
161
|
+
## v0.46.6 (2024-04-19)
|
162
|
+
|
163
|
+
### Ci
|
164
|
+
|
165
|
+
* ci: changed ophyd default branch to main ([`81484e8`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/81484e8160a4a09907313ed747c27ab3b6cbfdc4))
|
166
|
+
|
167
|
+
### Fix
|
168
|
+
|
169
|
+
* fix(cli): fixed support for devices as cli input ([`1111610`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/1111610f3206c5c46db6b4bd1e8827f1a4cd9e3f))
|
170
|
+
|
171
|
+
|
172
|
+
## v0.46.5 (2024-04-19)
|
173
|
+
|
174
|
+
### Test
|
175
|
+
|
176
|
+
* test(rpc/bec_figure): test_rpc_plotting_shortcuts_init_configs extended by testing scatter z gradient for BECWaveform through RPC ([`a156803`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/a1568033899bbcdbd457e697d6c8d478df26ba54))
|
PKG-INFO
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
Metadata-Version: 2.3
|
2
|
+
Name: bec_widgets
|
3
|
+
Version: 0.53.0
|
4
|
+
Summary: BEC Widgets
|
5
|
+
Project-URL: Bug Tracker, https://gitlab.psi.ch/bec/bec_widgets/issues
|
6
|
+
Project-URL: Homepage, https://gitlab.psi.ch/bec/bec_widgets
|
7
|
+
License-File: LICENSE
|
8
|
+
Classifier: Development Status :: 3 - Alpha
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
10
|
+
Classifier: Topic :: Scientific/Engineering
|
11
|
+
Requires-Python: >=3.10
|
12
|
+
Requires-Dist: bec-lib
|
13
|
+
Requires-Dist: black
|
14
|
+
Requires-Dist: h5py
|
15
|
+
Requires-Dist: jedi
|
16
|
+
Requires-Dist: pydantic
|
17
|
+
Requires-Dist: pyqtdarktheme
|
18
|
+
Requires-Dist: pyqtgraph
|
19
|
+
Requires-Dist: qtconsole
|
20
|
+
Requires-Dist: qtpy
|
21
|
+
Requires-Dist: zmq
|
22
|
+
Provides-Extra: dev
|
23
|
+
Requires-Dist: coverage; extra == 'dev'
|
24
|
+
Requires-Dist: fakeredis; extra == 'dev'
|
25
|
+
Requires-Dist: isort; extra == 'dev'
|
26
|
+
Requires-Dist: pytest; extra == 'dev'
|
27
|
+
Requires-Dist: pytest-qt; extra == 'dev'
|
28
|
+
Requires-Dist: pytest-random-order; extra == 'dev'
|
29
|
+
Requires-Dist: pytest-timeout; extra == 'dev'
|
30
|
+
Provides-Extra: pyqt5
|
31
|
+
Requires-Dist: pyqt5>=5.9; extra == 'pyqt5'
|
32
|
+
Provides-Extra: pyqt6
|
33
|
+
Requires-Dist: pyqt6>=6.7; extra == 'pyqt6'
|
@@ -1,40 +1,3 @@
|
|
1
|
-
Metadata-Version: 2.1
|
2
|
-
Name: bec-widgets
|
3
|
-
Version: 0.52.0
|
4
|
-
Summary: BEC Widgets
|
5
|
-
Home-page: https://gitlab.psi.ch/bec/bec-widgets
|
6
|
-
Project-URL: Bug Tracker, https://gitlab.psi.ch/bec/bec-widgets/issues
|
7
|
-
Classifier: Programming Language :: Python :: 3
|
8
|
-
Classifier: Development Status :: 3 - Alpha
|
9
|
-
Classifier: Topic :: Scientific/Engineering
|
10
|
-
Requires-Python: >=3.10
|
11
|
-
Description-Content-Type: text/markdown
|
12
|
-
License-File: LICENSE
|
13
|
-
Requires-Dist: pydantic
|
14
|
-
Requires-Dist: qtconsole
|
15
|
-
Requires-Dist: PyQt6 >=6.7
|
16
|
-
Requires-Dist: jedi
|
17
|
-
Requires-Dist: qtpy
|
18
|
-
Requires-Dist: pyqtgraph
|
19
|
-
Requires-Dist: bec-lib
|
20
|
-
Requires-Dist: zmq
|
21
|
-
Requires-Dist: h5py
|
22
|
-
Requires-Dist: pyqtdarktheme
|
23
|
-
Requires-Dist: black
|
24
|
-
Provides-Extra: dev
|
25
|
-
Requires-Dist: pytest ; extra == 'dev'
|
26
|
-
Requires-Dist: pytest-random-order ; extra == 'dev'
|
27
|
-
Requires-Dist: pytest-timeout ; extra == 'dev'
|
28
|
-
Requires-Dist: coverage ; extra == 'dev'
|
29
|
-
Requires-Dist: pytest-qt ; extra == 'dev'
|
30
|
-
Requires-Dist: black ; extra == 'dev'
|
31
|
-
Requires-Dist: isort ; extra == 'dev'
|
32
|
-
Requires-Dist: fakeredis ; extra == 'dev'
|
33
|
-
Provides-Extra: pyqt5
|
34
|
-
Requires-Dist: PyQt5 >=5.9 ; extra == 'pyqt5'
|
35
|
-
Provides-Extra: pyqt6
|
36
|
-
Requires-Dist: PyQt6 >=6.7 ; extra == 'pyqt6'
|
37
|
-
|
38
1
|
# BEC Widgets
|
39
2
|
|
40
3
|
BEC Widgets is a GUI framework designed for interaction with [BEC (Beamline Experiment Control)](https://gitlab.psi.ch/bec/bec).
|
@@ -43,7 +6,7 @@ BEC Widgets is a GUI framework designed for interaction with [BEC (Beamline Expe
|
|
43
6
|
Use the package manager [pip](https://pip.pypa.io/en/stable/) to install BEC Widgets:
|
44
7
|
|
45
8
|
```bash
|
46
|
-
pip install bec_widgets
|
9
|
+
pip install bec_widgets PyQt6
|
47
10
|
```
|
48
11
|
|
49
12
|
For development purposes, you can clone the repository and install the package locally in editable mode:
|
@@ -51,10 +14,11 @@ For development purposes, you can clone the repository and install the package l
|
|
51
14
|
```bash
|
52
15
|
git clone https://gitlab.psi.ch/bec/bec-widgets
|
53
16
|
cd bec_widgets
|
54
|
-
pip install -e .[dev]
|
17
|
+
pip install -e .[dev,pyqt6]
|
55
18
|
```
|
56
19
|
|
57
|
-
BEC Widgets currently supports both PyQt5 and PyQt6
|
20
|
+
BEC Widgets currently supports both PyQt5 and PyQt6, however, no default distribution is specified. As a result, users must install one of the supported
|
21
|
+
Python Qt distributions manually.
|
58
22
|
|
59
23
|
To select a specific Python Qt distribution, install the package with an additional tag:
|
60
24
|
|
@@ -68,7 +32,7 @@ pip install bec_widgets[pyqt5]
|
|
68
32
|
```
|
69
33
|
## Documentation
|
70
34
|
|
71
|
-
Documentation of BEC Widgets can be found [here](https://bec-widgets.readthedocs.io/en/latest/). The documentation of the BEC can be found [here](https://
|
35
|
+
Documentation of BEC Widgets can be found [here](https://bec-widgets.readthedocs.io/en/latest/). The documentation of the BEC can be found [here](https://bec.readthedocs.io/en/latest/).
|
72
36
|
|
73
37
|
## Contributing
|
74
38
|
|
@@ -107,4 +71,4 @@ All commits should use the Angular commit scheme:
|
|
107
71
|
|
108
72
|
## License
|
109
73
|
|
110
|
-
[BSD-3-Clause](https://choosealicense.com/licenses/bsd-3-clause/)
|
74
|
+
[BSD-3-Clause](https://choosealicense.com/licenses/bsd-3-clause/)
|