ezmsg 3.3.4__tar.gz → 3.5.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 (100) hide show
  1. ezmsg-3.5.0/.envrc +2 -0
  2. ezmsg-3.5.0/.flake8 +7 -0
  3. ezmsg-3.5.0/.git-blame-ignore-revs +4 -0
  4. ezmsg-3.5.0/.github/workflows/ci.yml +37 -0
  5. ezmsg-3.5.0/.github/workflows/publish.yml +28 -0
  6. ezmsg-3.5.0/.gitignore +143 -0
  7. ezmsg-3.5.0/.pre-commit-config.yaml +10 -0
  8. ezmsg-3.5.0/.python-version +1 -0
  9. ezmsg-3.5.0/.readthedocs.yaml +13 -0
  10. {ezmsg-3.3.4 → ezmsg-3.5.0}/PKG-INFO +24 -33
  11. {ezmsg-3.3.4 → ezmsg-3.5.0}/README.md +7 -10
  12. ezmsg-3.5.0/docs/Makefile +20 -0
  13. ezmsg-3.5.0/docs/make.bat +35 -0
  14. ezmsg-3.5.0/docs/requirements.txt +2 -0
  15. ezmsg-3.5.0/docs/source/about.rst +4 -0
  16. ezmsg-3.5.0/docs/source/api.rst +84 -0
  17. ezmsg-3.5.0/docs/source/conf.py +59 -0
  18. ezmsg-3.5.0/docs/source/developer.rst +12 -0
  19. ezmsg-3.5.0/docs/source/extensions/sigproc.rst +148 -0
  20. ezmsg-3.5.0/docs/source/extensions.rst +7 -0
  21. ezmsg-3.5.0/docs/source/getting-started.rst +53 -0
  22. ezmsg-3.5.0/docs/source/index.rst +31 -0
  23. ezmsg-3.5.0/docs/source/logo.png +0 -0
  24. ezmsg-3.5.0/docs/source/other.rst +17 -0
  25. ezmsg-3.5.0/docs/source/utils.rst +58 -0
  26. ezmsg-3.5.0/examples/ezmsg_attach.py +8 -0
  27. ezmsg-3.5.0/examples/ezmsg_configs.py +244 -0
  28. ezmsg-3.5.0/examples/ezmsg_count.py +74 -0
  29. ezmsg-3.5.0/examples/ezmsg_generator.py +158 -0
  30. ezmsg-3.5.0/examples/ezmsg_intro.py +187 -0
  31. ezmsg-3.5.0/examples/ezmsg_normalterm.py +123 -0
  32. ezmsg-3.5.0/examples/ezmsg_stop.py +117 -0
  33. ezmsg-3.5.0/examples/ezmsg_toy.py +199 -0
  34. ezmsg-3.5.0/pyproject.toml +50 -0
  35. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/__init__.py +5 -8
  36. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/backend.py +21 -3
  37. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/backendprocess.py +43 -32
  38. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/collection.py +25 -8
  39. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/command.py +7 -6
  40. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/component.py +87 -56
  41. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/dag.py +1 -2
  42. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/graphserver.py +14 -8
  43. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/message.py +2 -1
  44. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/messagecache.py +1 -2
  45. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/messagemarshal.py +1 -2
  46. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/netprotocol.py +1 -3
  47. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/pubclient.py +2 -2
  48. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/server.py +2 -4
  49. ezmsg-3.5.0/src/ezmsg/core/settings.py +66 -0
  50. ezmsg-3.5.0/src/ezmsg/core/state.py +57 -0
  51. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/stream.py +14 -4
  52. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/subclient.py +0 -1
  53. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/unit.py +68 -10
  54. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/util.py +2 -0
  55. ezmsg-3.5.0/src/ezmsg/util/debuglog.py +43 -0
  56. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/util/gen_to_unit.py +15 -10
  57. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/util/generator.py +3 -31
  58. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/util/messagecodec.py +3 -5
  59. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/util/messagegate.py +29 -6
  60. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/util/messagelogger.py +36 -2
  61. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/util/messagequeue.py +18 -4
  62. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/util/messagereplay.py +64 -7
  63. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/util/messages/axisarray.py +99 -42
  64. ezmsg-3.5.0/src/ezmsg/util/messages/chunker.py +100 -0
  65. ezmsg-3.5.0/src/ezmsg/util/messages/key.py +89 -0
  66. ezmsg-3.5.0/src/ezmsg/util/messages/modify.py +90 -0
  67. ezmsg-3.5.0/src/ezmsg/util/perf_test.py +220 -0
  68. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/util/terminate.py +37 -9
  69. ezmsg-3.5.0/tests/__init__.py +0 -0
  70. ezmsg-3.5.0/tests/ez_test_utils.py +78 -0
  71. ezmsg-3.5.0/tests/messages/__init__.py +0 -0
  72. ezmsg-3.5.0/tests/messages/test_axisarray.py +221 -0
  73. ezmsg-3.5.0/tests/messages/test_chunker.py +31 -0
  74. ezmsg-3.5.0/tests/messages/test_key.py +134 -0
  75. ezmsg-3.5.0/tests/messages/test_modify.py +56 -0
  76. ezmsg-3.5.0/tests/test_addressable.py +31 -0
  77. ezmsg-3.5.0/tests/test_attach.py +135 -0
  78. ezmsg-3.5.0/tests/test_connections.py +44 -0
  79. ezmsg-3.5.0/tests/test_dag.py +113 -0
  80. ezmsg-3.5.0/tests/test_generator.py +251 -0
  81. ezmsg-3.5.0/tests/test_graph.py +249 -0
  82. ezmsg-3.5.0/tests/test_run.py +131 -0
  83. ezmsg-3.5.0/tests/test_shm.py +107 -0
  84. ezmsg-3.5.0/tests/test_state.py +76 -0
  85. ezmsg-3.5.0/tests/test_test.py +5 -0
  86. ezmsg-3.5.0/uv.lock +738 -0
  87. ezmsg-3.3.4/pyproject.toml +0 -73
  88. ezmsg-3.3.4/src/ezmsg/core/settings.py +0 -31
  89. ezmsg-3.3.4/src/ezmsg/core/state.py +0 -29
  90. ezmsg-3.3.4/src/ezmsg/util/debuglog.py +0 -26
  91. ezmsg-3.3.4/src/ezmsg/util/messages/modify.py +0 -38
  92. {ezmsg-3.3.4 → ezmsg-3.5.0}/LICENSE +0 -0
  93. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/__main__.py +0 -0
  94. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/addressable.py +0 -0
  95. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/backpressure.py +0 -0
  96. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/graphcontext.py +0 -0
  97. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/core/shmserver.py +0 -0
  98. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/util/__init__.py +0 -0
  99. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/util/messages/__init__.py +0 -0
  100. {ezmsg-3.3.4 → ezmsg-3.5.0}/src/ezmsg/util/rate.py +0 -0
ezmsg-3.5.0/.envrc ADDED
@@ -0,0 +1,2 @@
1
+ export VIRTUAL_ENV=.venv
2
+ layout python
ezmsg-3.5.0/.flake8 ADDED
@@ -0,0 +1,7 @@
1
+ [flake8]
2
+ exclude =
3
+ migrations,
4
+ __pycache__,
5
+ env,
6
+ max_line_length = 120
7
+ max_complexity = 10
@@ -0,0 +1,4 @@
1
+ # chore: format files with ruff. Add pre-commit-config.
2
+ 5b4c220154d33cac15a75d3d7d978a75e67f2b8a
3
+ # Ran `black` formatter on entire codebase and fixed non-standard line-endings with `dos2unix`.
4
+ 4e4f20be40a73f2162a565732bae76ea0c812739
@@ -0,0 +1,37 @@
1
+ name: Test package
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ workflow_dispatch:
9
+
10
+ jobs:
11
+ build:
12
+ strategy:
13
+ matrix:
14
+ python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
15
+ os:
16
+ - "ubuntu-latest"
17
+ - "windows-latest"
18
+ - "macos-latest"
19
+ runs-on: ${{matrix.os}}
20
+
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+
24
+ - name: Install uv
25
+ uses: astral-sh/setup-uv@v2
26
+ with:
27
+ enable-cache: true
28
+ cache-dependency-glob: "uv.lock"
29
+
30
+ - name: Set up Python ${{ matrix.python-version }}
31
+ run: uv python install ${{ matrix.python-version }}
32
+
33
+ - name: Install the project
34
+ run: uv sync --all-extras --dev
35
+
36
+ - name: Run tests
37
+ run: uv run pytest tests
@@ -0,0 +1,28 @@
1
+ name: Upload Python Package
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ deploy:
13
+ runs-on: ubuntu-latest
14
+
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+
18
+ - name: Install uv
19
+ uses: astral-sh/setup-uv@v2
20
+
21
+ - name: Build Package
22
+ run: uv build
23
+
24
+ - name: Publish Package
25
+ env:
26
+ TWINE_USERNAME: __token__
27
+ TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
28
+ run: uvx twine upload dist/*
ezmsg-3.5.0/.gitignore ADDED
@@ -0,0 +1,143 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+ docs/source/_build
74
+ docs/source/generated
75
+
76
+ # PyBuilder
77
+ .pybuilder/
78
+ target/
79
+
80
+ # Jupyter Notebook
81
+ .ipynb_checkpoints
82
+
83
+ # IPython
84
+ profile_default/
85
+ ipython_config.py
86
+
87
+ # pyenv
88
+ # For a library or package, you might want to ignore these files since the code is
89
+ # intended to run in multiple environments; otherwise, check them in:
90
+ # .python-version
91
+
92
+ # pipenv
93
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
94
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
95
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
96
+ # install all needed dependencies.
97
+ #Pipfile.lock
98
+
99
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
100
+ __pypackages__/
101
+
102
+ # Celery stuff
103
+ celerybeat-schedule
104
+ celerybeat.pid
105
+
106
+ # SageMath parsed files
107
+ *.sage.py
108
+
109
+ # Environments
110
+ .env
111
+ .venv
112
+ env/
113
+ venv/
114
+ ENV/
115
+ env.bak/
116
+ venv.bak/
117
+
118
+ # Spyder project settings
119
+ .spyderproject
120
+ .spyproject
121
+
122
+ # Rope project settings
123
+ .ropeproject
124
+
125
+ # mkdocs documentation
126
+ /site
127
+
128
+ # mypy
129
+ .mypy_cache/
130
+ .dmypy.json
131
+ dmypy.json
132
+
133
+ # Pyre type checker
134
+ .pyre/
135
+
136
+ # pytype static type analyzer
137
+ .pytype/
138
+
139
+ # Cython debug symbols
140
+ cython_debug/
141
+
142
+ # JetBrains
143
+ .idea/
@@ -0,0 +1,10 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ # Ruff version.
4
+ rev: v0.5.0
5
+ hooks:
6
+ # Run the linter.
7
+ - id: ruff
8
+ args: [--fix]
9
+ # Run the formatter.
10
+ - id: ruff-format
@@ -0,0 +1 @@
1
+ 3.11
@@ -0,0 +1,13 @@
1
+ version: 2
2
+
3
+ build:
4
+ os: ubuntu-22.04
5
+ tools:
6
+ python: "3.12"
7
+
8
+ python:
9
+ install:
10
+ - requirements: docs/requirements.txt
11
+
12
+ sphinx:
13
+ configuration: docs/source/conf.py
@@ -1,29 +1,24 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: ezmsg
3
- Version: 3.3.4
3
+ Version: 3.5.0
4
4
  Summary: A simple DAG-based computation model
5
- License: MIT
6
- Author: Milsap, Griffin
7
- Author-email: griffin.milsap@gmail.com
8
- Requires-Python: >=3.8,<4.0
9
- Classifier: License :: OSI Approved :: MIT License
5
+ Author-email: Griffin Milsap <griffin.milsap@gmail.com>, Preston Peranich <pperanich@gmail.com>, Chadwick Boulay <chadwick.boulay@gmail.com>
6
+ License-Expression: MIT
7
+ License-File: LICENSE
10
8
  Classifier: Operating System :: OS Independent
11
9
  Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.8
13
- Classifier: Programming Language :: Python :: 3.9
14
- Classifier: Programming Language :: Python :: 3.10
15
- Classifier: Programming Language :: Python :: 3.11
16
- Classifier: Programming Language :: Python :: 3.12
17
- Provides-Extra: all-ext
18
- Provides-Extra: sigproc
19
- Provides-Extra: vispy
20
- Provides-Extra: websocket
21
- Provides-Extra: zmq
22
- Requires-Dist: ezmsg-sigproc ; extra == "sigproc" or extra == "all-ext"
23
- Requires-Dist: ezmsg-vispy ; extra == "vispy" or extra == "all-ext"
24
- Requires-Dist: ezmsg-websocket ; extra == "websocket" or extra == "all-ext"
25
- Requires-Dist: ezmsg-zmq ; extra == "zmq" or extra == "all-ext"
26
- Requires-Dist: typing-extensions (>=4.9.0,<5.0.0)
10
+ Requires-Python: >=3.8
11
+ Requires-Dist: typing-extensions>=4.9.0
12
+ Provides-Extra: docs
13
+ Requires-Dist: ezmsg-sigproc>=1.2.3; extra == 'docs'
14
+ Requires-Dist: sphinx-rtd-theme==2.0.0; extra == 'docs'
15
+ Requires-Dist: sphinx<=7.2; extra == 'docs'
16
+ Provides-Extra: test
17
+ Requires-Dist: flake8>=5.0.4; extra == 'test'
18
+ Requires-Dist: numpy>=1.24.2; extra == 'test'
19
+ Requires-Dist: pytest-asyncio>=0.23.8; extra == 'test'
20
+ Requires-Dist: pytest-cov>=5.0.0; extra == 'test'
21
+ Requires-Dist: pytest>=7.0.0; extra == 'test'
27
22
  Description-Content-Type: text/markdown
28
23
 
29
24
  # <img src="https://raw.githubusercontent.com/iscoe/ezmsg/main/docs/source/logo.png" width="50"/> ezmsg
@@ -61,7 +56,7 @@ $ source env/bin/activate
61
56
  (env) $ python -m pytest tests # Optionally, Perform tests
62
57
  ```
63
58
 
64
- Note that it is generally recommended to install poetry into it's own standalone venv via the `pipx` cli tool.
59
+ Note that it is generally recommended to install poetry into its own standalone venv via the `pipx` cli tool.
65
60
 
66
61
  ## Documentation
67
62
 
@@ -78,7 +73,7 @@ pip install "ezmsg[all_ext]"
78
73
  ```
79
74
 
80
75
  This will install all the available public extension packages for `ezmsg` that are listed in `pyproject.toml`.
81
- If you prefer to install the extension packages individually, you can use the following command:
76
+ If you prefer to install a subset of extension packages, you can use the following command:
82
77
 
83
78
  ```bash
84
79
  pip install "ezmsg[zmq,sigproc,...]"
@@ -86,17 +81,14 @@ pip install "ezmsg[zmq,sigproc,...]"
86
81
 
87
82
  Please note that the `ezmsg` package itself can still be installed without any additional extensions using `pip install ezmsg`.
88
83
 
89
- See the extension directory for more details
90
-
91
- - `ezmsg-sigproc` -- Timeseries signal processing modules
92
- - `ezmsg-websocket` -- Websocket server and client nodes for `ezmsg` graphs
93
- - `ezmsg-zmq` -- ZeroMQ pub and sub nodes for `ezmsg` graphs
94
- - ... More to come!
95
-
96
- Additionally, the following extensions are contained in external repositories:
84
+ Extensions can be managed manually as well. Here are some of the extensions we manage or are aware of:
97
85
 
86
+ - [ezmsg-sigproc](https://github.com/ezmsg-org/ezmsg-sigproc) -- Timeseries signal processing modules
87
+ - [ezmsg-websocket](https://github.com/ezmsg-org/ezmsg-websocket) -- Websocket server and client nodes for `ezmsg` graphs
88
+ - [ezmsg-zmq](https://github.com/ezmsg-org/ezmsg-zmq) -- ZeroMQ pub and sub nodes for `ezmsg` graphs
98
89
  - [ezmsg-panel](https://github.com/griffinmilsap/ezmsg-panel) -- Plotting tools for `ezmsg` that use [panel](https://github.com/holoviz/panel)
99
90
  - [ezmsg-blackrock](https://github.com/griffinmilsap/ezmsg-blackrock) -- Interface for Blackrock Cerebus ecosystem (incl. Neuroport) using `pycbsdk`
91
+ - [ezmsg-lsl](https://github.com/ezmsg-org/ezmsg-lsl) -- Source unit for LSL Inlet and sink unit for LSL Outlet
100
92
  - [ezmsg-unicorn](https://github.com/griffinmilsap/ezmsg-unicorn) -- g.tec Unicorn Hybrid Black integration for `ezmsg`
101
93
  - [ezmsg-gadget](https://github.com/griffinmilsap/ezmsg-gadget) -- USB-gadget with HID control integration for Raspberry Pi (Zero/W/2W, 4, CM4)
102
94
  - [ezmsg-openbci](https://github.com/griffinmilsap/ezmsg-openbci) -- OpenBCI Cyton serial interface for `ezmsg`
@@ -114,4 +106,3 @@ These publications provide insights into the practical applications and impact o
114
106
  ## Financial Support
115
107
 
116
108
  `ezmsg` is supported by Johns Hopkins University (JHU), the JHU Applied Physics Laboratory (APL), and by the Wyss Center for Bio and Neuro Engineering.
117
-
@@ -33,7 +33,7 @@ $ source env/bin/activate
33
33
  (env) $ python -m pytest tests # Optionally, Perform tests
34
34
  ```
35
35
 
36
- Note that it is generally recommended to install poetry into it's own standalone venv via the `pipx` cli tool.
36
+ Note that it is generally recommended to install poetry into its own standalone venv via the `pipx` cli tool.
37
37
 
38
38
  ## Documentation
39
39
 
@@ -50,7 +50,7 @@ pip install "ezmsg[all_ext]"
50
50
  ```
51
51
 
52
52
  This will install all the available public extension packages for `ezmsg` that are listed in `pyproject.toml`.
53
- If you prefer to install the extension packages individually, you can use the following command:
53
+ If you prefer to install a subset of extension packages, you can use the following command:
54
54
 
55
55
  ```bash
56
56
  pip install "ezmsg[zmq,sigproc,...]"
@@ -58,17 +58,14 @@ pip install "ezmsg[zmq,sigproc,...]"
58
58
 
59
59
  Please note that the `ezmsg` package itself can still be installed without any additional extensions using `pip install ezmsg`.
60
60
 
61
- See the extension directory for more details
62
-
63
- - `ezmsg-sigproc` -- Timeseries signal processing modules
64
- - `ezmsg-websocket` -- Websocket server and client nodes for `ezmsg` graphs
65
- - `ezmsg-zmq` -- ZeroMQ pub and sub nodes for `ezmsg` graphs
66
- - ... More to come!
67
-
68
- Additionally, the following extensions are contained in external repositories:
61
+ Extensions can be managed manually as well. Here are some of the extensions we manage or are aware of:
69
62
 
63
+ - [ezmsg-sigproc](https://github.com/ezmsg-org/ezmsg-sigproc) -- Timeseries signal processing modules
64
+ - [ezmsg-websocket](https://github.com/ezmsg-org/ezmsg-websocket) -- Websocket server and client nodes for `ezmsg` graphs
65
+ - [ezmsg-zmq](https://github.com/ezmsg-org/ezmsg-zmq) -- ZeroMQ pub and sub nodes for `ezmsg` graphs
70
66
  - [ezmsg-panel](https://github.com/griffinmilsap/ezmsg-panel) -- Plotting tools for `ezmsg` that use [panel](https://github.com/holoviz/panel)
71
67
  - [ezmsg-blackrock](https://github.com/griffinmilsap/ezmsg-blackrock) -- Interface for Blackrock Cerebus ecosystem (incl. Neuroport) using `pycbsdk`
68
+ - [ezmsg-lsl](https://github.com/ezmsg-org/ezmsg-lsl) -- Source unit for LSL Inlet and sink unit for LSL Outlet
72
69
  - [ezmsg-unicorn](https://github.com/griffinmilsap/ezmsg-unicorn) -- g.tec Unicorn Hybrid Black integration for `ezmsg`
73
70
  - [ezmsg-gadget](https://github.com/griffinmilsap/ezmsg-gadget) -- USB-gadget with HID control integration for Raspberry Pi (Zero/W/2W, 4, CM4)
74
71
  - [ezmsg-openbci](https://github.com/griffinmilsap/ezmsg-openbci) -- OpenBCI Cyton serial interface for `ezmsg`
@@ -0,0 +1,20 @@
1
+ # Minimal makefile for Sphinx documentation
2
+ #
3
+
4
+ # You can set these variables from the command line, and also
5
+ # from the environment for the first two.
6
+ SPHINXOPTS ?=
7
+ SPHINXBUILD ?= sphinx-build
8
+ SOURCEDIR = source
9
+ BUILDDIR = build
10
+
11
+ # Put it first so that "make" without argument is like "make help".
12
+ help:
13
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
14
+
15
+ .PHONY: help Makefile
16
+
17
+ # Catch-all target: route all unknown targets to Sphinx using the new
18
+ # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
19
+ %: Makefile
20
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
@@ -0,0 +1,35 @@
1
+ @ECHO OFF
2
+
3
+ pushd %~dp0
4
+
5
+ REM Command file for Sphinx documentation
6
+
7
+ if "%SPHINXBUILD%" == "" (
8
+ set SPHINXBUILD=sphinx-build
9
+ )
10
+ set SOURCEDIR=source
11
+ set BUILDDIR=build
12
+
13
+ if "%1" == "" goto help
14
+
15
+ %SPHINXBUILD% >NUL 2>NUL
16
+ if errorlevel 9009 (
17
+ echo.
18
+ echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
19
+ echo.installed, then set the SPHINXBUILD environment variable to point
20
+ echo.to the full path of the 'sphinx-build' executable. Alternatively you
21
+ echo.may add the Sphinx directory to PATH.
22
+ echo.
23
+ echo.If you don't have Sphinx installed, grab it from
24
+ echo.http://sphinx-doc.org/
25
+ exit /b 1
26
+ )
27
+
28
+ %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
29
+ goto end
30
+
31
+ :help
32
+ %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
33
+
34
+ :end
35
+ popd
@@ -0,0 +1,2 @@
1
+ sphinx-rtd-theme
2
+ ezmsg-sigproc @ git+https://github.com/ezmsg-org/ezmsg-sigproc@dev
@@ -0,0 +1,4 @@
1
+ How ``ezmsg`` works
2
+ ===================
3
+
4
+ When an ``ezmsg`` pipeline is started, ``ezmsg`` initializes two additional processes to manage execution. The first is the SharedMemoryServer, which allocates blocks of memory to nodes. The second is the GraphServer, which keeps track of the graph state during execution. One GraphServer should be initialized per ezmsg pipeline, and one SharedMemoryServer should be initialized per machine which the pipeline is running on. Check out the Other page for more information on managing the SharedMemoryServer and GraphServer during pipeline execution.
@@ -0,0 +1,84 @@
1
+ API
2
+ ===
3
+
4
+ An ``ezmsg`` pipeline is created from a few basic components.
5
+ ``ezmsg`` provides a framework for you to define your own graphs using its building blocks.
6
+ Inherit from its base components to define a pipeline that works for your project.
7
+
8
+ .. automodule:: ezmsg.core
9
+
10
+ Most ``ezmsg`` classes intended for use in building pipelines are available in ``ezmsg.core``.
11
+ It is convention to ``import ezmsg.core as ez`` and then use this shorthand in your code. e.g.,
12
+
13
+ .. code-block:: python
14
+
15
+ class MyUnit(ez.Unit):
16
+ ...
17
+
18
+ Components
19
+ ----------
20
+
21
+ .. autoclass:: Component
22
+
23
+ .. autoclass:: Collection
24
+ :show-inheritance:
25
+ :members:
26
+
27
+ .. autoclass:: NetworkDefinition
28
+
29
+ .. autoclass:: Unit
30
+ :show-inheritance:
31
+ :members:
32
+ :inherited-members:
33
+
34
+
35
+ Unit Function Decorators
36
+ ^^^^^^^^^^^^^^^^^^^^^^^^
37
+
38
+ These function decorators can be added to member functions.
39
+
40
+ .. automethod:: ezmsg.core.subscriber
41
+
42
+ .. automethod:: ezmsg.core.publisher
43
+
44
+ .. automethod:: ezmsg.core.main
45
+
46
+ .. automethod:: unit.thread
47
+
48
+ .. automethod:: ezmsg.core.task
49
+
50
+ .. automethod:: ezmsg.core.process
51
+
52
+ .. automethod:: ezmsg.core.timeit
53
+
54
+
55
+ Component Interaction
56
+ ---------------------
57
+
58
+ .. autoclass:: Settings
59
+
60
+ .. autoclass:: State
61
+
62
+
63
+ Stream
64
+ ------
65
+
66
+ Facilitates a flow of ``Messages`` into or out of a ``Component``.
67
+
68
+ .. autoclass:: InputStream
69
+
70
+ .. autoclass:: OutputStream
71
+
72
+
73
+ Custom Exceptions
74
+ -----------------
75
+
76
+ .. autoclass:: Complete
77
+
78
+ .. autoclass:: NormalTermination
79
+
80
+
81
+ Entry Point
82
+ -----------
83
+
84
+ .. automethod:: ezmsg.core.run
@@ -0,0 +1,59 @@
1
+ # Configuration file for the Sphinx documentation builder.
2
+
3
+ # -- Project information
4
+
5
+ project = "ezmsg"
6
+ copyright = "2022, JHU/APL"
7
+ author = "JHU/APL"
8
+
9
+ release = "3.3.4"
10
+ version = "3.3.4"
11
+
12
+ # -- General configuration
13
+
14
+ extensions = [
15
+ "sphinx.ext.duration",
16
+ "sphinx.ext.doctest",
17
+ "sphinx.ext.autodoc",
18
+ "sphinx.ext.autosummary",
19
+ "sphinx.ext.intersphinx",
20
+ "sphinx.ext.linkcode",
21
+ "sphinx.ext.napoleon",
22
+ ]
23
+
24
+ intersphinx_mapping = {
25
+ "python": ("https://docs.python.org/3/", None),
26
+ "sphinx": ("https://www.sphinx-doc.org/en/master/", None),
27
+ "numpy": ("https://docs.scipy.org/doc/numpy", None),
28
+ "scipy": ("https://docs.scipy.org/doc/scipy/reference", None),
29
+ }
30
+ intersphinx_disabled_domains = ["std"]
31
+
32
+ templates_path = ["_templates"]
33
+
34
+ # -- Options for HTML output
35
+
36
+ html_theme = "sphinx_rtd_theme"
37
+
38
+ # -- Options for EPUB output
39
+ epub_show_urls = "footnote"
40
+
41
+ add_module_names = False
42
+
43
+ branch = "dev"
44
+ code_url = f"https://github.com/iscoe/ezmsg/blob/{branch}/"
45
+ sigproc_code_url = f"https://github.com/ezmsg-org/ezmsg-sigproc/blob/{branch}/"
46
+
47
+
48
+ def linkcode_resolve(domain, info):
49
+ if domain != "py":
50
+ return None
51
+ if not info["module"]:
52
+ return None
53
+ filename = info["module"].replace(".", "/")
54
+ if "sigproc" in filename:
55
+ return f"{sigproc_code_url}src/{filename}.py"
56
+ elif "core" in filename:
57
+ return f"{code_url}src/ezmsg/core/__init__.py"
58
+ else:
59
+ return f"{code_url}src/{filename}.py"
@@ -0,0 +1,12 @@
1
+ Developer Info
2
+ ==============
3
+
4
+ ezmsg developers will want to clone this repo locally then create an env with dependencies using `poetry install`.
5
+
6
+ Documentation
7
+ -------------
8
+
9
+ Documentation is built using Sphinx.
10
+
11
+ `poetry install --with docs`
12
+ `poetry run docs/make html`