horiba-sdk 0.3.2__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.
Files changed (48) hide show
  1. horiba_sdk-0.3.2/LICENSE +20 -0
  2. horiba_sdk-0.3.2/PKG-INFO +438 -0
  3. horiba_sdk-0.3.2/README.md +409 -0
  4. horiba_sdk-0.3.2/horiba_sdk/__init__.py +19 -0
  5. horiba_sdk-0.3.2/horiba_sdk/communication/__init__.py +44 -0
  6. horiba_sdk-0.3.2/horiba_sdk/communication/abstract_communicator.py +59 -0
  7. horiba_sdk-0.3.2/horiba_sdk/communication/communication_exception.py +19 -0
  8. horiba_sdk-0.3.2/horiba_sdk/communication/messages.py +87 -0
  9. horiba_sdk-0.3.2/horiba_sdk/communication/websocket_communicator.py +213 -0
  10. horiba_sdk-0.3.2/horiba_sdk/core/resolution.py +45 -0
  11. horiba_sdk-0.3.2/horiba_sdk/devices/__init__.py +11 -0
  12. horiba_sdk-0.3.2/horiba_sdk/devices/abstract_device_discovery.py +7 -0
  13. horiba_sdk-0.3.2/horiba_sdk/devices/abstract_device_manager.py +68 -0
  14. horiba_sdk-0.3.2/horiba_sdk/devices/ccd_discovery.py +57 -0
  15. horiba_sdk-0.3.2/horiba_sdk/devices/device_manager.py +250 -0
  16. horiba_sdk-0.3.2/horiba_sdk/devices/fake_device_manager.py +133 -0
  17. horiba_sdk-0.3.2/horiba_sdk/devices/fake_icl_server.py +56 -0
  18. horiba_sdk-0.3.2/horiba_sdk/devices/fake_responses/ccd.json +168 -0
  19. horiba_sdk-0.3.2/horiba_sdk/devices/fake_responses/icl.json +29 -0
  20. horiba_sdk-0.3.2/horiba_sdk/devices/fake_responses/monochromator.json +187 -0
  21. horiba_sdk-0.3.2/horiba_sdk/devices/monochromator_discovery.py +48 -0
  22. horiba_sdk-0.3.2/horiba_sdk/devices/single_devices/__init__.py +5 -0
  23. horiba_sdk-0.3.2/horiba_sdk/devices/single_devices/abstract_device.py +79 -0
  24. horiba_sdk-0.3.2/horiba_sdk/devices/single_devices/ccd.py +443 -0
  25. horiba_sdk-0.3.2/horiba_sdk/devices/single_devices/monochromator.py +395 -0
  26. horiba_sdk-0.3.2/horiba_sdk/icl_error/__init__.py +34 -0
  27. horiba_sdk-0.3.2/horiba_sdk/icl_error/abstract_error.py +65 -0
  28. horiba_sdk-0.3.2/horiba_sdk/icl_error/abstract_error_db.py +25 -0
  29. horiba_sdk-0.3.2/horiba_sdk/icl_error/error_list.json +265 -0
  30. horiba_sdk-0.3.2/horiba_sdk/icl_error/icl_error.py +30 -0
  31. horiba_sdk-0.3.2/horiba_sdk/icl_error/icl_error_db.py +81 -0
  32. horiba_sdk-0.3.2/horiba_sdk/sync/__init__.py +0 -0
  33. horiba_sdk-0.3.2/horiba_sdk/sync/communication/__init__.py +7 -0
  34. horiba_sdk-0.3.2/horiba_sdk/sync/communication/abstract_communicator.py +48 -0
  35. horiba_sdk-0.3.2/horiba_sdk/sync/communication/test_client.py +16 -0
  36. horiba_sdk-0.3.2/horiba_sdk/sync/communication/websocket_communicator.py +212 -0
  37. horiba_sdk-0.3.2/horiba_sdk/sync/devices/__init__.py +15 -0
  38. horiba_sdk-0.3.2/horiba_sdk/sync/devices/abstract_device_discovery.py +17 -0
  39. horiba_sdk-0.3.2/horiba_sdk/sync/devices/abstract_device_manager.py +68 -0
  40. horiba_sdk-0.3.2/horiba_sdk/sync/devices/device_discovery.py +82 -0
  41. horiba_sdk-0.3.2/horiba_sdk/sync/devices/device_manager.py +209 -0
  42. horiba_sdk-0.3.2/horiba_sdk/sync/devices/fake_device_manager.py +91 -0
  43. horiba_sdk-0.3.2/horiba_sdk/sync/devices/fake_icl_server.py +79 -0
  44. horiba_sdk-0.3.2/horiba_sdk/sync/devices/single_devices/__init__.py +5 -0
  45. horiba_sdk-0.3.2/horiba_sdk/sync/devices/single_devices/abstract_device.py +83 -0
  46. horiba_sdk-0.3.2/horiba_sdk/sync/devices/single_devices/ccd.py +219 -0
  47. horiba_sdk-0.3.2/horiba_sdk/sync/devices/single_devices/monochromator.py +150 -0
  48. horiba_sdk-0.3.2/pyproject.toml +152 -0
@@ -0,0 +1,20 @@
1
+ The MIT License (MIT)
2
+ Copyright (c) 2023 ZühlkeEngineering
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is
9
+ furnished to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19
+ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
20
+ OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,438 @@
1
+ Metadata-Version: 2.1
2
+ Name: horiba-sdk
3
+ Version: 0.3.2
4
+ Summary: 'horiba-sdk' is a package that provides source code for the development with Horiba devices
5
+ Home-page: https://github.com/ThatsTheEnd/horiba-python-sdk
6
+ License: MIT
7
+ Keywords: Horiba,SDK
8
+ Author: ZühlkeEngineering
9
+ Author-email: nikolaus.naredi-rainer@zuehlke.com
10
+ Requires-Python: >=3.9,<4
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Requires-Dist: loguru (>=0.7.2,<0.8.0)
21
+ Requires-Dist: numericalunits (>=1.25,<2.0)
22
+ Requires-Dist: overrides (>=7.4.0,<8.0.0)
23
+ Requires-Dist: pint (>=0.23,<0.24)
24
+ Requires-Dist: psutil (>=5.9.7,<6.0.0)
25
+ Requires-Dist: websockets (>=12.0,<13.0)
26
+ Project-URL: Repository, https://github.com/ThatsTheEnd/horiba-python-sdk
27
+ Description-Content-Type: text/markdown
28
+
29
+ # horiba-python-sdk
30
+
31
+ <div align="center">
32
+
33
+ [![Build status](https://github.com/ThatsTheEnd/horiba-python-sdk/workflows/build/badge.svg?branch=master&event=push)](https://github.com/ThatsTheEnd/horiba-python-sdk/actions?query=workflow%3Abuild)
34
+ [![Python Version](https://img.shields.io/pypi/pyversions/horiba-python-sdk.svg)](https://pypi.org/project/horiba-python-sdk/)
35
+ [![Dependencies Status](https://img.shields.io/badge/dependencies-up%20to%20date-brightgreen.svg)](https://github.com/ThatsTheEnd/horiba-python-sdk/pulls?utf8=%E2%9C%93&q=is%3Apr%20author%3Aapp%2Fdependabot)
36
+
37
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
38
+ [![Security: bandit](https://img.shields.io/badge/security-bandit-green.svg)](https://github.com/PyCQA/bandit)
39
+ [![Pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/ThatsTheEnd/horiba-python-sdk/blob/master/.pre-commit-config.yaml)
40
+ [![Semantic Versions](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--versions-e10079.svg)](https://github.com/ThatsTheEnd/horiba-python-sdk/releases)
41
+ [![License](https://img.shields.io/github/license/ThatsTheEnd/horiba-python-sdk)](https://github.com/ThatsTheEnd/horiba-python-sdk/blob/master/LICENSE)
42
+ ![Coverage Report](assets/images/coverage.svg)
43
+ [![Documentation Status](https://readthedocs.org/projects/horiba-python-sdk/badge/?version=latest)](https://horiba-python-sdk.readthedocs.io/en/latest/?badge=latest)
44
+
45
+ 'horiba-python-sdk' is a package that provides source code for the development with Horiba devices
46
+
47
+ </div>
48
+
49
+ ## 🛠️ Usage
50
+
51
+ 1. Install the sdk:
52
+
53
+ ```bash
54
+ pip install horiba-python-sdk
55
+ ```
56
+
57
+ or install with `Poetry`
58
+
59
+ ```bash
60
+ poetry add horiba-python-sdk
61
+ ```
62
+
63
+ 2. Create a file named `center_scan.py` and copy-paste the content of
64
+ [`examples/asynchronous_examples/center_scan.py`](https://github.com/ThatsTheEnd/horiba-python-sdk/blob/feature/publishing/examples/asynchronous_examples/center_scan.py)
65
+
66
+
67
+ 3. Run the example with:
68
+
69
+ ```bash
70
+ python center_scan.py
71
+ ```
72
+
73
+ ## 👩‍💻 First steps as contributor
74
+
75
+ ### Initialize your code
76
+
77
+ 1. Initialize `git` inside your repo:
78
+
79
+ ```bash
80
+ cd horiba-python-sdk
81
+ git init
82
+ ```
83
+
84
+ 2. If you don't have `Poetry` installed run:
85
+
86
+ ```bash
87
+ make poetry-download
88
+ ```
89
+
90
+ 3. Initialize poetry and install `pre-commit` hooks:
91
+
92
+ ```bash
93
+ make install
94
+ make pre-commit-install
95
+ ```
96
+
97
+ 4. Run the codestyle:
98
+
99
+ ```bash
100
+ make codestyle
101
+ ```
102
+
103
+ 5. Upload initial code to GitHub:
104
+
105
+ ```bash
106
+ git add .
107
+ git commit -m ":tada: Initial commit"
108
+ git branch -M main
109
+ git remote add origin https://github.com/ThatsTheEnd/horiba-python-sdk.git
110
+ git push -u origin main
111
+ ```
112
+
113
+ <!-- ### Set up bots -->
114
+
115
+ <!-- - Set up [Dependabot](https://docs.github.com/en/github/administering-a-repository/enabling-and-disabling-version-updates#enabling-github-dependabot-version-updates) to ensure you have the latest dependencies. -->
116
+ <!-- - Set up [Stale bot](https://github.com/apps/stale) for automatic issue closing. -->
117
+
118
+ ### Poetry
119
+
120
+ Want to know more about Poetry? Check [its documentation](https://python-poetry.org/docs/).
121
+
122
+ <details>
123
+ <summary>Details about Poetry</summary>
124
+ <p>
125
+
126
+ Poetry's [commands](https://python-poetry.org/docs/cli/#commands) are very intuitive and easy to learn, like:
127
+
128
+ - `poetry add numpy@latest`
129
+ - `poetry run pytest`
130
+ - `poetry publish --build`
131
+
132
+ etc
133
+ </p>
134
+ </details>
135
+
136
+ ### Building and releasing your package
137
+
138
+ Building a new version of the application contains steps:
139
+
140
+ - Bump the version of your package `poetry version <version>`. You can pass the new version explicitly, or a rule such as `major`, `minor`, or `patch`. For more details, refer to the [Semantic Versions](https://semver.org/) standard.
141
+ - Update the `CHANGELOG.md` with `git-changelog -B auto -Tio CHANGELOG.md`
142
+ - Make a commit to `GitHub`.
143
+ - Create a tag and push it. The release is automatically triggered on tag push:
144
+
145
+ ```bash
146
+ git tag vX.Y.Z # where the version MUST match the one you indicated before
147
+ git push --tags
148
+ ```
149
+
150
+ ### Makefile usage
151
+
152
+ [`Makefile`](https://github.com/ThatsTheEnd/horiba-python-sdk/blob/master/Makefile) contains a lot of functions for faster development.
153
+
154
+ <details>
155
+ <summary>1. Download and remove Poetry</summary>
156
+ <p>
157
+
158
+ To download and install Poetry run:
159
+
160
+ ```bash
161
+ make poetry-download
162
+ ```
163
+
164
+ To uninstall
165
+
166
+ ```bash
167
+ make poetry-remove
168
+ ```
169
+
170
+ </p>
171
+ </details>
172
+
173
+ <details>
174
+ <summary>2. Install all dependencies and pre-commit hooks</summary>
175
+ <p>
176
+
177
+ Install requirements:
178
+
179
+ ```bash
180
+ make install
181
+ ```
182
+
183
+ Pre-commit hooks coulb be installed after `git init` via
184
+
185
+ ```bash
186
+ make pre-commit-install
187
+ ```
188
+
189
+ </p>
190
+ </details>
191
+
192
+ <details>
193
+ <summary>3. Codestyle</summary>
194
+ <p>
195
+
196
+ Automatic formatting uses `pyupgrade`, `isort` and `black`.
197
+
198
+ ```bash
199
+ make codestyle
200
+
201
+ # or use synonym
202
+ make formatting
203
+ ```
204
+
205
+ Codestyle checks only, without rewriting files:
206
+
207
+ ```bash
208
+ make check-codestyle
209
+ ```
210
+
211
+ > Note: `check-codestyle` uses `isort`, `black` and `darglint` library
212
+
213
+ Update all dev libraries to the latest version using one comand
214
+
215
+ ```bash
216
+ make update-dev-deps
217
+ ```
218
+
219
+ <details>
220
+ <summary>4. Code security</summary>
221
+ <p>
222
+
223
+ ```bash
224
+ make check-safety
225
+ ```
226
+
227
+ This command launches `Poetry` integrity checks as well as identifies security issues with `Safety` and `Bandit`.
228
+
229
+ ```bash
230
+ make check-safety
231
+ ```
232
+
233
+ </p>
234
+ </details>
235
+
236
+ </p>
237
+ </details>
238
+
239
+ <details>
240
+ <summary>5. Type checks</summary>
241
+ <p>
242
+
243
+ Run `mypy` static type checker
244
+
245
+ ```bash
246
+ make mypy
247
+ ```
248
+
249
+ </p>
250
+ </details>
251
+
252
+ <details>
253
+ <summary>6. Tests with coverage badges</summary>
254
+ <p>
255
+
256
+ Run `pytest`
257
+
258
+ ```bash
259
+ make test
260
+ ```
261
+
262
+ </p>
263
+ </details>
264
+
265
+ <details>
266
+ <summary>7. All linters</summary>
267
+ <p>
268
+
269
+ Of course there is a command to ~~rule~~ run all linters in one:
270
+
271
+ ```bash
272
+ make lint
273
+ ```
274
+
275
+ the same as:
276
+
277
+ ```bash
278
+ make test
279
+ make check-codestyle
280
+ make mypy
281
+ make check-safety
282
+ ```
283
+
284
+ </p>
285
+ </details>
286
+
287
+ <details>
288
+ <summary>8. Docker</summary>
289
+ <p>
290
+
291
+ ```bash
292
+ make docker-build
293
+ ```
294
+
295
+ which is equivalent to:
296
+
297
+ ```bash
298
+ make docker-build VERSION=latest
299
+ ```
300
+
301
+ Remove docker image with
302
+
303
+ ```bash
304
+ make docker-remove
305
+ ```
306
+
307
+ More information [about docker](https://github.com/ThatsTheEnd/horiba-python-sdk/tree/master/docker).
308
+
309
+ </p>
310
+ </details>
311
+
312
+ <details>
313
+ <summary>9. Cleanup</summary>
314
+ <p>
315
+ Delete pycache files
316
+
317
+ ```bash
318
+ make pycache-remove
319
+ ```
320
+
321
+ Remove package build
322
+
323
+ ```bash
324
+ make build-remove
325
+ ```
326
+
327
+ Delete .DS_STORE files
328
+
329
+ ```bash
330
+ make dsstore-remove
331
+ ```
332
+
333
+ Remove .mypycache
334
+
335
+ ```bash
336
+ make mypycache-remove
337
+ ```
338
+
339
+ Or to remove all above run:
340
+
341
+ ```bash
342
+ make cleanup
343
+ ```
344
+
345
+ </p>
346
+ </details>
347
+
348
+ ## 📚 Documentation
349
+
350
+ The latest documentation can be found at
351
+ [horiba-python-sdk.readthedocs.io](https://horiba-python-sdk.readthedocs.io/en/latest/).
352
+ In order to build it locally, run the following in the `docs/` folder:
353
+
354
+ ```bash
355
+ make html
356
+ ```
357
+
358
+ The documentation will then be built under `docs/build/html/`.
359
+
360
+ Documentation is built each time a commit is pushed on `main` or for pull
361
+ requests. When release tags are created in the repo, readthedocs will also tag
362
+ the documentation accordingly
363
+
364
+ ## 🚀 Features
365
+
366
+ ### Development features
367
+
368
+ - Supports for `Python 3.9` and higher.
369
+ - [`Poetry`](https://python-poetry.org/) as the dependencies manager. See configuration in [`pyproject.toml`](https://github.com/ThatsTheEnd/horiba-python-sdk/blob/master/pyproject.toml).
370
+ - Automatic codestyle with [`ruff`](https://github.com/astral-sh/ruff)
371
+ - Ready-to-use [`pre-commit`](https://pre-commit.com/) hooks with code-formatting.
372
+ - Type checks with [`mypy`](https://mypy.readthedocs.io); security checks with [`safety`](https://github.com/pyupio/safety) and [`bandit`](https://github.com/PyCQA/bandit)
373
+ - Testing with [`pytest`](https://docs.pytest.org/en/latest/).
374
+ - Ready-to-use [`.editorconfig`](https://github.com/ThatsTheEnd/horiba-python-sdk/blob/master/.editorconfig), [`.dockerignore`](https://github.com/ThatsTheEnd/horiba-python-sdk/blob/master/.dockerignore), and [`.gitignore`](https://github.com/ThatsTheEnd/horiba-python-sdk/blob/master/.gitignore). You don't have to worry about those things.
375
+
376
+ ### Deployment features
377
+
378
+ - `GitHub` integration: issue and pr templates.
379
+ - `Github Actions` with predefined [build workflow](https://github.com/ThatsTheEnd/horiba-python-sdk/blob/master/.github/workflows/build.yml) as the default CI/CD.
380
+ - Everything is already set up for security checks, codestyle checks, code formatting, testing, linting, docker builds, etc with [`Makefile`](https://github.com/ThatsTheEnd/horiba-python-sdk/blob/master/Makefile#L89). More details in [makefile-usage](#makefile-usage).
381
+ - [Dockerfile](https://github.com/ThatsTheEnd/horiba-python-sdk/blob/master/docker/Dockerfile) for your package.
382
+ - Always up-to-date dependencies with [`@dependabot`](https://dependabot.com/). You will only [enable it](https://docs.github.com/en/github/administering-a-repository/enabling-and-disabling-version-updates#enabling-github-dependabot-version-updates).
383
+ - Automatic drafts of new releases with [`Release Drafter`](https://github.com/marketplace/actions/release-drafter). You may see the list of labels in [`release-drafter.yml`](https://github.com/ThatsTheEnd/horiba-python-sdk/blob/master/.github/release-drafter.yml). Works perfectly with [Semantic Versions](https://semver.org/) specification.
384
+
385
+ ### Open source community features
386
+
387
+ - Ready-to-use [Pull Requests templates](https://github.com/ThatsTheEnd/horiba-python-sdk/blob/master/.github/PULL_REQUEST_TEMPLATE.md) and several [Issue templates](https://github.com/ThatsTheEnd/horiba-python-sdk/tree/master/.github/ISSUE_TEMPLATE).
388
+ - Files such as: `LICENSE`, `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, and `SECURITY.md` are generated automatically.
389
+ - [Semantic Versions](https://semver.org/) specification with [`Release Drafter`](https://github.com/marketplace/actions/release-drafter).
390
+ <!-- - [`Stale bot`](https://github.com/apps/stale) that closes abandoned issues after a period of inactivity. (You will only [need to setup free plan](https://github.com/marketplace/stale)). Configuration is [here](https://github.com/ThatsTheEnd/horiba-python-sdk/blob/master/.github/.stale.yml). -->
391
+
392
+
393
+ ## 📈 Releases
394
+
395
+ You can see the list of available releases on the [GitHub Releases](https://github.com/ThatsTheEnd/horiba-python-sdk/releases) page.
396
+
397
+ We follow [Semantic Versions](https://semver.org/) specification.
398
+
399
+ <!-- We use [`Release Drafter`](https://github.com/marketplace/actions/release-drafter). As pull requests are merged, a draft release is kept up-to-date listing the changes, ready to publish when you’re ready. With the categories option, you can categorize pull requests in release notes using labels. -->
400
+
401
+ ### List of labels and corresponding titles
402
+
403
+ | **Label** | **Title in Releases** |
404
+ | :-----------------------------------: | :---------------------: |
405
+ | `enhancement`, `feature` | 🚀 Features |
406
+ | `bug`, `refactoring`, `bugfix`, `fix` | 🔧 Fixes & Refactoring |
407
+ | `build`, `ci`, `testing` | 📦 Build System & CI/CD |
408
+ | `breaking` | 💥 Breaking Changes |
409
+ | `documentation` | 📝 Documentation |
410
+ | `dependencies` | ⬆️ Dependencies updates |
411
+
412
+ <!-- You can update it in [`release-drafter.yml`](https://github.com/ThatsTheEnd/horiba-python-sdk/blob/master/.github/release-drafter.yml). -->
413
+
414
+ <!-- GitHub creates the `bug`, `enhancement`, and `documentation` labels for you. Dependabot creates the `dependencies` label. Create the remaining labels on the Issues tab of your GitHub repository, when you need them. -->
415
+
416
+ ## 🛡 License
417
+
418
+ [![License](https://img.shields.io/github/license/ThatsTheEnd/horiba-python-sdk)](https://github.com/ThatsTheEnd/horiba-python-sdk/blob/master/LICENSE)
419
+
420
+ This project is licensed under the terms of the `MIT` license. See [LICENSE](https://github.com/ThatsTheEnd/horiba-python-sdk/blob/master/LICENSE) for more details.
421
+
422
+ ## 📃 Citation
423
+
424
+ ```bibtex
425
+ @misc{horiba-python-sdk,
426
+ author = {ZühlkeEngineering},
427
+ title = {'horiba-python-sdk' is a package that provides source code for the development with Horiba devices},
428
+ year = {2023},
429
+ publisher = {GitHub},
430
+ journal = {GitHub repository},
431
+ howpublished = {\url{https://github.com/ThatsTheEnd/horiba-python-sdk}}
432
+ }
433
+ ```
434
+
435
+ ## Credits [![🚀 Your next Python package needs a bleeding-edge project structure.](https://img.shields.io/badge/python--package--template-%F0%9F%9A%80-brightgreen)](https://github.com/TezRomacH/python-package-template)
436
+
437
+ This project was generated with [`python-package-template`](https://github.com/TezRomacH/python-package-template)
438
+