OptiCommPy 0.7.0__tar.gz → 0.10.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.
Files changed (46) hide show
  1. OptiCommPy-0.10.0/OptiCommPy.egg-info/PKG-INFO +146 -0
  2. {OptiCommPy-0.7.0 → OptiCommPy-0.10.0}/OptiCommPy.egg-info/SOURCES.txt +8 -2
  3. {OptiCommPy-0.7.0 → OptiCommPy-0.10.0}/OptiCommPy.egg-info/requires.txt +6 -5
  4. OptiCommPy-0.10.0/PKG-INFO +146 -0
  5. OptiCommPy-0.10.0/README.rst +127 -0
  6. OptiCommPy-0.10.0/optic/comm/fec.py +1055 -0
  7. {OptiCommPy-0.7.0 → OptiCommPy-0.10.0}/optic/comm/metrics.py +251 -46
  8. OptiCommPy-0.10.0/optic/comm/modulation.py +597 -0
  9. OptiCommPy-0.10.0/optic/comm/ofdm.py +288 -0
  10. OptiCommPy-0.10.0/optic/comm/sources.py +241 -0
  11. {OptiCommPy-0.7.0 → OptiCommPy-0.10.0}/optic/dsp/carrierRecovery.py +91 -56
  12. OptiCommPy-0.10.0/optic/dsp/carrierRecoveryGPU.py +68 -0
  13. OptiCommPy-0.10.0/optic/dsp/clockRecovery.py +232 -0
  14. {OptiCommPy-0.7.0 → OptiCommPy-0.10.0}/optic/dsp/core.py +336 -118
  15. OptiCommPy-0.10.0/optic/dsp/coreGPU.py +169 -0
  16. OptiCommPy-0.10.0/optic/dsp/equalization.py +1095 -0
  17. {OptiCommPy-0.7.0 → OptiCommPy-0.10.0}/optic/models/amplification.py +127 -88
  18. {OptiCommPy-0.7.0 → OptiCommPy-0.10.0}/optic/models/channels.py +66 -65
  19. {OptiCommPy-0.7.0 → OptiCommPy-0.10.0}/optic/models/devices.py +232 -105
  20. {OptiCommPy-0.7.0 → OptiCommPy-0.10.0}/optic/models/modelsGPU.py +73 -82
  21. OptiCommPy-0.10.0/optic/models/perturbation.py +607 -0
  22. OptiCommPy-0.10.0/optic/models/tx.py +337 -0
  23. OptiCommPy-0.10.0/optic/plot.py +658 -0
  24. OptiCommPy-0.10.0/optic/utils.py +326 -0
  25. {OptiCommPy-0.7.0 → OptiCommPy-0.10.0}/setup.py +12 -11
  26. OptiCommPy-0.10.0/tests/test_dsp.py +28 -0
  27. OptiCommPy-0.10.0/tests/test_metrics.py +97 -0
  28. OptiCommPy-0.10.0/tests/test_modulation.py +56 -0
  29. OptiCommPy-0.7.0/OptiCommPy.egg-info/PKG-INFO +0 -112
  30. OptiCommPy-0.7.0/PKG-INFO +0 -112
  31. OptiCommPy-0.7.0/README.md +0 -82
  32. OptiCommPy-0.7.0/optic/comm/fec.py +0 -66
  33. OptiCommPy-0.7.0/optic/comm/modulation.py +0 -236
  34. OptiCommPy-0.7.0/optic/comm/ofdm.py +0 -201
  35. OptiCommPy-0.7.0/optic/dsp/clockRecovery.py +0 -172
  36. OptiCommPy-0.7.0/optic/dsp/coreGPU.py +0 -48
  37. OptiCommPy-0.7.0/optic/dsp/equalization.py +0 -812
  38. OptiCommPy-0.7.0/optic/models/tx.py +0 -195
  39. OptiCommPy-0.7.0/optic/plot.py +0 -328
  40. OptiCommPy-0.7.0/optic/utils.py +0 -170
  41. {OptiCommPy-0.7.0 → OptiCommPy-0.10.0}/LICENSE +0 -0
  42. {OptiCommPy-0.7.0 → OptiCommPy-0.10.0}/OptiCommPy.egg-info/dependency_links.txt +0 -0
  43. {OptiCommPy-0.7.0 → OptiCommPy-0.10.0}/OptiCommPy.egg-info/top_level.txt +0 -0
  44. {OptiCommPy-0.7.0 → OptiCommPy-0.10.0}/optic/__init__.py +0 -0
  45. {OptiCommPy-0.7.0 → OptiCommPy-0.10.0}/runner +0 -0
  46. {OptiCommPy-0.7.0 → OptiCommPy-0.10.0}/setup.cfg +0 -0
@@ -0,0 +1,146 @@
1
+ Metadata-Version: 2.1
2
+ Name: OptiCommPy
3
+ Version: 0.10.0
4
+ Summary: Optical Communications Algorithms with Python
5
+ Home-page: https://github.com/edsonportosilva/OptiCommPy
6
+ Maintainer: Edson Porto da Silva
7
+ Maintainer-email: edsonporto88@gmail.com
8
+ License: GPL-3.0 license
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Intended Audience :: Science/Research
11
+ Classifier: Intended Audience :: Telecommunications Industry
12
+ Classifier: Operating System :: Unix
13
+ Classifier: Programming Language :: Python
14
+ Classifier: Topic :: Scientific/Engineering
15
+ Classifier: Topic :: Software Development
16
+ Requires-Python: >=3.2
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+
20
+
21
+ .. image:: ../../figures/logo_OptiCommPy.jpg
22
+ :width: 75%
23
+ :align: center
24
+
25
+ **OptiCommPy** is a Python-based framework to simulate systems, subsystems, and
26
+ components of fiber optic communication systems, for educational and research purposes.
27
+
28
+ .. image:: ../../figures/eyeDisp.gif
29
+ :width: 45%
30
+ .. image:: ../../figures/40GOOK_spectrum.jpg
31
+ :width: 45%
32
+
33
+
34
+ .. image:: ../../figures/DSP.jpg
35
+ :width: 600px
36
+ :align: center
37
+
38
+ |PyPI| |PyPI - Downloads| |Documentation Status| |DOI| |JOSS|
39
+
40
+ Available features
41
+ ------------------
42
+
43
+ - Several digital modulations available (M-PAM, square M-QAM, M-PSK,
44
+ OOK) to simulate IM-DD and coherent optical systems.
45
+ - Numerical models to simulate optical transmitters, optical
46
+ amplification, nonlinear propagation over optical fibers, and optical
47
+ receivers.
48
+ - CPU and GPU-based implementations of the `split-step Fourier
49
+ Method <https://en.wikipedia.org/wiki/Split-step_method>`__ to
50
+ simulate polarization multiplexed WDM transmission.
51
+ - Standard digital signal processing (DSP) blocks employed in coherent
52
+ optical receivers, such as:
53
+
54
+ - *Signal resampling.*
55
+ - *Matched filtering.*
56
+ - *Clock recovery.*
57
+ - *Electronic chromatic dispersion compensation (EDC)*.
58
+ - *Several NxN MIMO adaptive equalization algorithms*.
59
+ - *Carrier phase recovery algorithms.*
60
+
61
+ - Functions to implement forward error correction (FEC) encoders and decoders.
62
+ - For most of the cases, `Numba <https://numba.pydata.org/>`__ is used
63
+ to speed up the code.
64
+ - Evaluate transmission performance with metrics such as:
65
+
66
+ - *Bit-error-rate* (BER).
67
+ - *Symbol-error-rate* (SER).
68
+ - *Error vector magnitude* (EVM).
69
+ - *Mutual information* (MI).
70
+ - *Generalized mutual information* (GMI).
71
+ - *Normalized generalized mutual information* (NGMI).
72
+
73
+ - Visualization of the spectrum of electrical/optical signals, signal
74
+ constellations, and eyediagrams.
75
+
76
+ How can I contribute?
77
+ ---------------------
78
+
79
+ - If you want to contribute to this project:
80
+ - Create a new issue in the GitHub repository to discuss the feature you want to implement.
81
+ - Fork the repository and create a new branch.
82
+ - Make sure you have the latest version of the code.
83
+ - Check the conventions adopted in the code writing (e.g. naming conventions, docstrings, etc.).
84
+ - Remember to write an example of usage for the new feature you are implementing.
85
+ - After the process is finished, send a pull request.
86
+
87
+ - If you want to suggest or discuss anything related to OptiCommPy, please get in touch via e-mail
88
+ (edsonporto88@gmail.com).
89
+
90
+ Requirements/Dependencies
91
+ -------------------------
92
+
93
+ - python>=3.2
94
+ - numpy>=1.24.4
95
+ - scipy>=1.13.0
96
+ - matplotlib>=3.7.0
97
+ - numba>=0.54.1
98
+ - tqdm>=4.64.1
99
+ - simple-pid>=1.0.1
100
+ - mpl-scatter-density>=0.7.0
101
+ - sphinx-rtd-theme>=1.2.2
102
+ - nbsphinx>=0.9.3
103
+ - nbsphinx-link>=1.3.0
104
+ - prettytable>=3.16.0
105
+ - cupy-cuda12x>=13.1.0 (optional, in case GPU processing is desired)
106
+
107
+ Installation
108
+ ------------
109
+
110
+ Using pip:
111
+
112
+ ::
113
+
114
+ pip install OptiCommPy
115
+
116
+ Cloning the repository from GitHub:
117
+
118
+ ::
119
+
120
+ $ git clone https://github.com/edsonportosilva/OptiCommPy.git
121
+ $ cd OptiCommPy
122
+ $ pip install .
123
+
124
+ Documentation
125
+ -------------
126
+
127
+ We are continuously making efforts to improve the code documentation.
128
+ You can find the latest documentation in
129
+ `opticommpy.readthedocs.io <https://opticommpy.readthedocs.io/en/latest/index.html>`__.
130
+
131
+ Citing this repository
132
+ ----------------------
133
+
134
+ Edson Porto da Silva, Adolfo Fernandes Herbster. "OptiCommPy: Open-source Simulation of Fiber Optic Communications with Python", *Journal of Open Source Software*, 9(98), 6600, (2024) https://doi.org/10.21105/joss.06600
135
+
136
+ .. |PyPI| image:: https://img.shields.io/pypi/v/OptiCommPy?label=pypi%20package
137
+ .. |PyPI - Downloads| image:: https://img.shields.io/pypi/dm/OptiCommPy
138
+ .. |Documentation Status| image:: https://readthedocs.org/projects/opticommpy/badge/?version=latest
139
+ :target: https://opticommpy.readthedocs.io/en/latest/?badge=latest
140
+ .. |DOI| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.11450597.svg
141
+ :target: https://doi.org/10.5281/zenodo.11450597
142
+ .. |JOSS| image:: https://joss.theoj.org/papers/10.21105/joss.06600/status.svg
143
+ :target: https://doi.org/10.21105/joss.06600
144
+
145
+
146
+
@@ -1,5 +1,5 @@
1
1
  LICENSE
2
- README.md
2
+ README.rst
3
3
  runner
4
4
  setup.py
5
5
  OptiCommPy.egg-info/PKG-INFO
@@ -14,7 +14,9 @@ optic/comm/fec.py
14
14
  optic/comm/metrics.py
15
15
  optic/comm/modulation.py
16
16
  optic/comm/ofdm.py
17
+ optic/comm/sources.py
17
18
  optic/dsp/carrierRecovery.py
19
+ optic/dsp/carrierRecoveryGPU.py
18
20
  optic/dsp/clockRecovery.py
19
21
  optic/dsp/core.py
20
22
  optic/dsp/coreGPU.py
@@ -23,4 +25,8 @@ optic/models/amplification.py
23
25
  optic/models/channels.py
24
26
  optic/models/devices.py
25
27
  optic/models/modelsGPU.py
26
- optic/models/tx.py
28
+ optic/models/perturbation.py
29
+ optic/models/tx.py
30
+ tests/test_dsp.py
31
+ tests/test_metrics.py
32
+ tests/test_modulation.py
@@ -1,11 +1,12 @@
1
- numpy>=1.9.2
2
- scipy>=0.15.0
1
+ numpy>=1.24.4
2
+ scipy>=1.13.0
3
3
  matplotlib>=3.7.0
4
4
  sympy
5
5
  tqdm>=4.64.1
6
- numba>=0.54.1
7
- scikit-commpy>=0.7.0
6
+ numba>=0.54.0
8
7
  simple-pid>=1.0.1
9
8
  mpl-scatter-density>=0.7.0
10
- pandas>=2.0.0
11
9
  sphinx-rtd-theme>=1.2.2
10
+ nbsphinx>=0.9.3
11
+ nbsphinx-link>=1.3.0
12
+ prettytable>=3.16.0
@@ -0,0 +1,146 @@
1
+ Metadata-Version: 2.1
2
+ Name: OptiCommPy
3
+ Version: 0.10.0
4
+ Summary: Optical Communications Algorithms with Python
5
+ Home-page: https://github.com/edsonportosilva/OptiCommPy
6
+ Maintainer: Edson Porto da Silva
7
+ Maintainer-email: edsonporto88@gmail.com
8
+ License: GPL-3.0 license
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Intended Audience :: Science/Research
11
+ Classifier: Intended Audience :: Telecommunications Industry
12
+ Classifier: Operating System :: Unix
13
+ Classifier: Programming Language :: Python
14
+ Classifier: Topic :: Scientific/Engineering
15
+ Classifier: Topic :: Software Development
16
+ Requires-Python: >=3.2
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+
20
+
21
+ .. image:: ../../figures/logo_OptiCommPy.jpg
22
+ :width: 75%
23
+ :align: center
24
+
25
+ **OptiCommPy** is a Python-based framework to simulate systems, subsystems, and
26
+ components of fiber optic communication systems, for educational and research purposes.
27
+
28
+ .. image:: ../../figures/eyeDisp.gif
29
+ :width: 45%
30
+ .. image:: ../../figures/40GOOK_spectrum.jpg
31
+ :width: 45%
32
+
33
+
34
+ .. image:: ../../figures/DSP.jpg
35
+ :width: 600px
36
+ :align: center
37
+
38
+ |PyPI| |PyPI - Downloads| |Documentation Status| |DOI| |JOSS|
39
+
40
+ Available features
41
+ ------------------
42
+
43
+ - Several digital modulations available (M-PAM, square M-QAM, M-PSK,
44
+ OOK) to simulate IM-DD and coherent optical systems.
45
+ - Numerical models to simulate optical transmitters, optical
46
+ amplification, nonlinear propagation over optical fibers, and optical
47
+ receivers.
48
+ - CPU and GPU-based implementations of the `split-step Fourier
49
+ Method <https://en.wikipedia.org/wiki/Split-step_method>`__ to
50
+ simulate polarization multiplexed WDM transmission.
51
+ - Standard digital signal processing (DSP) blocks employed in coherent
52
+ optical receivers, such as:
53
+
54
+ - *Signal resampling.*
55
+ - *Matched filtering.*
56
+ - *Clock recovery.*
57
+ - *Electronic chromatic dispersion compensation (EDC)*.
58
+ - *Several NxN MIMO adaptive equalization algorithms*.
59
+ - *Carrier phase recovery algorithms.*
60
+
61
+ - Functions to implement forward error correction (FEC) encoders and decoders.
62
+ - For most of the cases, `Numba <https://numba.pydata.org/>`__ is used
63
+ to speed up the code.
64
+ - Evaluate transmission performance with metrics such as:
65
+
66
+ - *Bit-error-rate* (BER).
67
+ - *Symbol-error-rate* (SER).
68
+ - *Error vector magnitude* (EVM).
69
+ - *Mutual information* (MI).
70
+ - *Generalized mutual information* (GMI).
71
+ - *Normalized generalized mutual information* (NGMI).
72
+
73
+ - Visualization of the spectrum of electrical/optical signals, signal
74
+ constellations, and eyediagrams.
75
+
76
+ How can I contribute?
77
+ ---------------------
78
+
79
+ - If you want to contribute to this project:
80
+ - Create a new issue in the GitHub repository to discuss the feature you want to implement.
81
+ - Fork the repository and create a new branch.
82
+ - Make sure you have the latest version of the code.
83
+ - Check the conventions adopted in the code writing (e.g. naming conventions, docstrings, etc.).
84
+ - Remember to write an example of usage for the new feature you are implementing.
85
+ - After the process is finished, send a pull request.
86
+
87
+ - If you want to suggest or discuss anything related to OptiCommPy, please get in touch via e-mail
88
+ (edsonporto88@gmail.com).
89
+
90
+ Requirements/Dependencies
91
+ -------------------------
92
+
93
+ - python>=3.2
94
+ - numpy>=1.24.4
95
+ - scipy>=1.13.0
96
+ - matplotlib>=3.7.0
97
+ - numba>=0.54.1
98
+ - tqdm>=4.64.1
99
+ - simple-pid>=1.0.1
100
+ - mpl-scatter-density>=0.7.0
101
+ - sphinx-rtd-theme>=1.2.2
102
+ - nbsphinx>=0.9.3
103
+ - nbsphinx-link>=1.3.0
104
+ - prettytable>=3.16.0
105
+ - cupy-cuda12x>=13.1.0 (optional, in case GPU processing is desired)
106
+
107
+ Installation
108
+ ------------
109
+
110
+ Using pip:
111
+
112
+ ::
113
+
114
+ pip install OptiCommPy
115
+
116
+ Cloning the repository from GitHub:
117
+
118
+ ::
119
+
120
+ $ git clone https://github.com/edsonportosilva/OptiCommPy.git
121
+ $ cd OptiCommPy
122
+ $ pip install .
123
+
124
+ Documentation
125
+ -------------
126
+
127
+ We are continuously making efforts to improve the code documentation.
128
+ You can find the latest documentation in
129
+ `opticommpy.readthedocs.io <https://opticommpy.readthedocs.io/en/latest/index.html>`__.
130
+
131
+ Citing this repository
132
+ ----------------------
133
+
134
+ Edson Porto da Silva, Adolfo Fernandes Herbster. "OptiCommPy: Open-source Simulation of Fiber Optic Communications with Python", *Journal of Open Source Software*, 9(98), 6600, (2024) https://doi.org/10.21105/joss.06600
135
+
136
+ .. |PyPI| image:: https://img.shields.io/pypi/v/OptiCommPy?label=pypi%20package
137
+ .. |PyPI - Downloads| image:: https://img.shields.io/pypi/dm/OptiCommPy
138
+ .. |Documentation Status| image:: https://readthedocs.org/projects/opticommpy/badge/?version=latest
139
+ :target: https://opticommpy.readthedocs.io/en/latest/?badge=latest
140
+ .. |DOI| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.11450597.svg
141
+ :target: https://doi.org/10.5281/zenodo.11450597
142
+ .. |JOSS| image:: https://joss.theoj.org/papers/10.21105/joss.06600/status.svg
143
+ :target: https://doi.org/10.21105/joss.06600
144
+
145
+
146
+
@@ -0,0 +1,127 @@
1
+
2
+ .. image:: ../../figures/logo_OptiCommPy.jpg
3
+ :width: 75%
4
+ :align: center
5
+
6
+ **OptiCommPy** is a Python-based framework to simulate systems, subsystems, and
7
+ components of fiber optic communication systems, for educational and research purposes.
8
+
9
+ .. image:: ../../figures/eyeDisp.gif
10
+ :width: 45%
11
+ .. image:: ../../figures/40GOOK_spectrum.jpg
12
+ :width: 45%
13
+
14
+
15
+ .. image:: ../../figures/DSP.jpg
16
+ :width: 600px
17
+ :align: center
18
+
19
+ |PyPI| |PyPI - Downloads| |Documentation Status| |DOI| |JOSS|
20
+
21
+ Available features
22
+ ------------------
23
+
24
+ - Several digital modulations available (M-PAM, square M-QAM, M-PSK,
25
+ OOK) to simulate IM-DD and coherent optical systems.
26
+ - Numerical models to simulate optical transmitters, optical
27
+ amplification, nonlinear propagation over optical fibers, and optical
28
+ receivers.
29
+ - CPU and GPU-based implementations of the `split-step Fourier
30
+ Method <https://en.wikipedia.org/wiki/Split-step_method>`__ to
31
+ simulate polarization multiplexed WDM transmission.
32
+ - Standard digital signal processing (DSP) blocks employed in coherent
33
+ optical receivers, such as:
34
+
35
+ - *Signal resampling.*
36
+ - *Matched filtering.*
37
+ - *Clock recovery.*
38
+ - *Electronic chromatic dispersion compensation (EDC)*.
39
+ - *Several NxN MIMO adaptive equalization algorithms*.
40
+ - *Carrier phase recovery algorithms.*
41
+
42
+ - Functions to implement forward error correction (FEC) encoders and decoders.
43
+ - For most of the cases, `Numba <https://numba.pydata.org/>`__ is used
44
+ to speed up the code.
45
+ - Evaluate transmission performance with metrics such as:
46
+
47
+ - *Bit-error-rate* (BER).
48
+ - *Symbol-error-rate* (SER).
49
+ - *Error vector magnitude* (EVM).
50
+ - *Mutual information* (MI).
51
+ - *Generalized mutual information* (GMI).
52
+ - *Normalized generalized mutual information* (NGMI).
53
+
54
+ - Visualization of the spectrum of electrical/optical signals, signal
55
+ constellations, and eyediagrams.
56
+
57
+ How can I contribute?
58
+ ---------------------
59
+
60
+ - If you want to contribute to this project:
61
+ - Create a new issue in the GitHub repository to discuss the feature you want to implement.
62
+ - Fork the repository and create a new branch.
63
+ - Make sure you have the latest version of the code.
64
+ - Check the conventions adopted in the code writing (e.g. naming conventions, docstrings, etc.).
65
+ - Remember to write an example of usage for the new feature you are implementing.
66
+ - After the process is finished, send a pull request.
67
+
68
+ - If you want to suggest or discuss anything related to OptiCommPy, please get in touch via e-mail
69
+ (edsonporto88@gmail.com).
70
+
71
+ Requirements/Dependencies
72
+ -------------------------
73
+
74
+ - python>=3.2
75
+ - numpy>=1.24.4
76
+ - scipy>=1.13.0
77
+ - matplotlib>=3.7.0
78
+ - numba>=0.54.1
79
+ - tqdm>=4.64.1
80
+ - simple-pid>=1.0.1
81
+ - mpl-scatter-density>=0.7.0
82
+ - sphinx-rtd-theme>=1.2.2
83
+ - nbsphinx>=0.9.3
84
+ - nbsphinx-link>=1.3.0
85
+ - prettytable>=3.16.0
86
+ - cupy-cuda12x>=13.1.0 (optional, in case GPU processing is desired)
87
+
88
+ Installation
89
+ ------------
90
+
91
+ Using pip:
92
+
93
+ ::
94
+
95
+ pip install OptiCommPy
96
+
97
+ Cloning the repository from GitHub:
98
+
99
+ ::
100
+
101
+ $ git clone https://github.com/edsonportosilva/OptiCommPy.git
102
+ $ cd OptiCommPy
103
+ $ pip install .
104
+
105
+ Documentation
106
+ -------------
107
+
108
+ We are continuously making efforts to improve the code documentation.
109
+ You can find the latest documentation in
110
+ `opticommpy.readthedocs.io <https://opticommpy.readthedocs.io/en/latest/index.html>`__.
111
+
112
+ Citing this repository
113
+ ----------------------
114
+
115
+ Edson Porto da Silva, Adolfo Fernandes Herbster. "OptiCommPy: Open-source Simulation of Fiber Optic Communications with Python", *Journal of Open Source Software*, 9(98), 6600, (2024) https://doi.org/10.21105/joss.06600
116
+
117
+ .. |PyPI| image:: https://img.shields.io/pypi/v/OptiCommPy?label=pypi%20package
118
+ .. |PyPI - Downloads| image:: https://img.shields.io/pypi/dm/OptiCommPy
119
+ .. |Documentation Status| image:: https://readthedocs.org/projects/opticommpy/badge/?version=latest
120
+ :target: https://opticommpy.readthedocs.io/en/latest/?badge=latest
121
+ .. |DOI| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.11450597.svg
122
+ :target: https://doi.org/10.5281/zenodo.11450597
123
+ .. |JOSS| image:: https://joss.theoj.org/papers/10.21105/joss.06600/status.svg
124
+ :target: https://doi.org/10.21105/joss.06600
125
+
126
+
127
+