antioch-py 2.0.2__py3-none-any.whl → 2.0.4__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.

Potentially problematic release.


This version of antioch-py might be problematic. Click here for more details.

@@ -0,0 +1,115 @@
1
+ Metadata-Version: 2.4
2
+ Name: antioch-py
3
+ Version: 2.0.4
4
+ Summary: The Antioch Python SDK
5
+ Author-email: Antioch Robotics <support@antioch.dev>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://antioch.com
8
+ Keywords: robotics,simulation,middleware,sdk
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
14
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
15
+ Requires-Python: <3.13,>=3.12
16
+ Description-Content-Type: text/markdown
17
+ Requires-Dist: click>=8.0.0
18
+ Requires-Dist: click>=8.3.0
19
+ Requires-Dist: eclipse-zenoh>=1.5.0
20
+ Requires-Dist: google-cloud-artifact-registry>=1.16.1
21
+ Requires-Dist: httpx>=0.27.0
22
+ Requires-Dist: loguru>=0.7.3
23
+ Requires-Dist: msgpack==1.1.1
24
+ Requires-Dist: msgpack>=1.1.1
25
+ Requires-Dist: numpy==1.26.0
26
+ Requires-Dist: ormsgpack>=1.6.0
27
+ Requires-Dist: pydantic>=2.11.6
28
+ Requires-Dist: pydantic>=2.11.7
29
+ Requires-Dist: python-on-whales>=0.78.0
30
+ Requires-Dist: pyyaml>=6.0.2
31
+ Requires-Dist: requests>=2.32.0
32
+ Requires-Dist: scipy==1.15.3
33
+ Requires-Dist: sortedcontainers-stubs>=2.4.3
34
+ Requires-Dist: sortedcontainers>=2.4.0
35
+ Requires-Dist: tqdm>=4.67.1
36
+
37
+ # antioch-py
38
+
39
+ Python SDK for the [Antioch](https://antioch.com) autonomy simulation platform.
40
+
41
+ ## Overview
42
+
43
+ The antioch-py package provides two components:
44
+
45
+ ### Module SDK (`antioch.module`)
46
+
47
+ The Module SDK is a framework for building Antioch modules in Python. Modules are containerized components that run alongside your simulation, processing sensor data and producing outputs. Each module runs in its own Docker container and communicates with the simulation through the Antioch runtime. Install the SDK in your module's Dockerfile to read sensors, run inference, and publish results.
48
+
49
+ ```python
50
+ from antioch.module import Execution, Module
51
+
52
+ def process_radar(execution: Execution) -> None:
53
+ scan = execution.read_radar("sensor")
54
+ if scan is not None and len(scan.detections) > 0:
55
+ execution.output("detections").set(scan)
56
+
57
+ if __name__ == "__main__":
58
+ module = Module()
59
+ module.register("radar_node", process_radar)
60
+ module.spin()
61
+ ```
62
+
63
+ ### Session SDK (`antioch.session`)
64
+
65
+ The Session SDK is a client library for orchestrating Antioch simulations. Use it from Python scripts or Jupyter notebooks to programmatically build scenes, load assets, spawn robots, control simulation playback, and record data. The Session SDK connects to your Antioch deployment and provides a high-level API for automation and experimentation.
66
+
67
+ ```python
68
+ from antioch.session import Scene, Session, Task, TaskOutcome
69
+
70
+ session = Session()
71
+ scene = Scene()
72
+
73
+ # Load environment and robot
74
+ scene.add_asset(path="/World/environment", name="warehouse", version="1.0.0")
75
+ ark = scene.add_ark(name="my_robot", version="0.1.0")
76
+
77
+ # Run simulation
78
+ task = Task()
79
+ task.start(mcap_path="/tmp/recording.mcap")
80
+
81
+ scene.play()
82
+ scene.step(1_000_000) # step 1 second
83
+ scene.pause()
84
+
85
+ task.finish(outcome=TaskOutcome.SUCCESS)
86
+ ```
87
+
88
+ ## Installation
89
+
90
+ To install in your Python environment:
91
+
92
+ ```bash
93
+ pip install antioch-py
94
+ ```
95
+
96
+ To install in your Python-based Docker image (e.g. for an Antioch module):
97
+
98
+ ```dockerfile
99
+ FROM python:3.12-slim
100
+
101
+ RUN pip install antioch-py
102
+
103
+ COPY . /app
104
+ WORKDIR /app
105
+
106
+ CMD ["python", "module.py"]
107
+ ```
108
+
109
+ ## Documentation
110
+
111
+ Visit [antioch.com](https://antioch.com) for full documentation.
112
+
113
+ ## License
114
+
115
+ MIT
@@ -92,8 +92,8 @@ common/utils/comms.py,sha256=1lpnb9ra5I3xv-Eo0GFZ7nR4TjKseOeDNf9QMWQZbds,17283
92
92
  common/utils/logger.py,sha256=VcZ4dduWut8xWPs-F5ye8RRrNdBehSSG3r1LAWc-IBY,3389
93
93
  common/utils/time.py,sha256=kGDzObbaqWOep4vT1Y2W-BheunxdjYBI4V3Nfp4Ck3Q,790
94
94
  common/utils/usd.py,sha256=to4VPtnamMDIQK-pwDIVfiuzUnNzEImj5szOar1NHiE,253
95
- antioch_py-2.0.2.dist-info/METADATA,sha256=aHf62VpCgcdjH_NoZu6zh_aK-H8vAkkqqgyoMfCcgMk,7486
96
- antioch_py-2.0.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
97
- antioch_py-2.0.2.dist-info/entry_points.txt,sha256=1bLTH5BXCOsQkS8k6L_wJ6Nj62j4aoU9Ey_PhWzsRRM,59
98
- antioch_py-2.0.2.dist-info/top_level.txt,sha256=GtzNccsep3YdBt9VXQ7-ZFsFJFffr4hyZvqg0YqRqtw,15
99
- antioch_py-2.0.2.dist-info/RECORD,,
95
+ antioch_py-2.0.4.dist-info/METADATA,sha256=ZwBaVZbFfIZvnFEXLQWXUDi2ZRoXA5CDVTuh1GvLwMU,3485
96
+ antioch_py-2.0.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
97
+ antioch_py-2.0.4.dist-info/entry_points.txt,sha256=1bLTH5BXCOsQkS8k6L_wJ6Nj62j4aoU9Ey_PhWzsRRM,59
98
+ antioch_py-2.0.4.dist-info/top_level.txt,sha256=GtzNccsep3YdBt9VXQ7-ZFsFJFffr4hyZvqg0YqRqtw,15
99
+ antioch_py-2.0.4.dist-info/RECORD,,
@@ -1,249 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: antioch-py
3
- Version: 2.0.2
4
- Summary: The Antioch Python SDK
5
- Author-email: Antioch Robotics <support@antioch.dev>
6
- License-Expression: MIT
7
- Project-URL: Homepage, https://antioch.com
8
- Keywords: robotics,simulation,middleware,sdk
9
- Classifier: Development Status :: 4 - Beta
10
- Classifier: Intended Audience :: Developers
11
- Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.12
13
- Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
14
- Classifier: Topic :: Software Development :: Libraries :: Python Modules
15
- Requires-Python: <3.13,>=3.12
16
- Description-Content-Type: text/markdown
17
- Requires-Dist: click>=8.0.0
18
- Requires-Dist: click>=8.3.0
19
- Requires-Dist: eclipse-zenoh>=1.5.0
20
- Requires-Dist: google-cloud-artifact-registry>=1.16.1
21
- Requires-Dist: httpx>=0.27.0
22
- Requires-Dist: loguru>=0.7.3
23
- Requires-Dist: msgpack==1.1.1
24
- Requires-Dist: msgpack>=1.1.1
25
- Requires-Dist: numpy==1.26.0
26
- Requires-Dist: ormsgpack>=1.6.0
27
- Requires-Dist: pydantic>=2.11.6
28
- Requires-Dist: pydantic>=2.11.7
29
- Requires-Dist: python-on-whales>=0.78.0
30
- Requires-Dist: pyyaml>=6.0.2
31
- Requires-Dist: requests>=2.32.0
32
- Requires-Dist: scipy==1.15.3
33
- Requires-Dist: sortedcontainers-stubs>=2.4.3
34
- Requires-Dist: sortedcontainers>=2.4.0
35
- Requires-Dist: tqdm>=4.67.1
36
-
37
- # Antioch Python
38
-
39
- Python client library for the Antioch middleware platform.
40
-
41
- ## Installation
42
-
43
- Authenticate your local environment with GCP via the Google Cloud CLI:
44
-
45
- ```bash
46
- gcloud auth login # Login to Google Cloud
47
- gcloud config set project proof-of-concept-staging-9072 # Set the correct project
48
- gcloud auth application-default login # Create app credentials
49
- ```
50
-
51
- This project uses [uv](https://github.com/astral-sh/uv), a fast Python package and project manager. Install it and set up authentication:
52
-
53
- ```bash
54
- # Install uv
55
- curl -LsSf https://astral.sh/uv/install.sh | sh
56
-
57
- # Install keyring authentication globally for uv
58
- uv tool install keyring --with keyrings.google-artifactregistry-auth
59
-
60
- # Install all default groups in one step
61
- uv sync
62
- ```
63
-
64
- Install the pre-commit hooks to auto-run `uv sync` and `ruff format` on Git commit:
65
-
66
- ```bash
67
- uv run pre-commit install
68
- ```
69
-
70
- ## Usage
71
-
72
- The Antioch Python client builds both Docker images that can be used and a Python package.
73
-
74
- ## Docker Images
75
-
76
- We have 2 Docker images currently
77
-
78
- ### Standard Image (`antioch-py:latest`)
79
-
80
- - Base: `python:3.12-slim`
81
- - Sidecar binary at `/usr/local/bin/sidecar`
82
- - antioch-py package pre-installed
83
- - Python 3.12 virtual environment with pip
84
- - Runs as root for maximum compatibility
85
-
86
- Build locally using
87
-
88
- ```
89
- ./build-image.sh
90
- ```
91
-
92
- ### ROS Image (`antioch-py-ros:latest`)
93
-
94
- - Base: `osrf/ros:jazzy-desktop`
95
- - All features of the standard image
96
- - Full ROS 2 Jazzy desktop environment
97
- - ROS 2 Python packages and tools pre-installed
98
- - Ideal for robotics applications requiring ROS integration
99
-
100
- NOTE: not included in cloudbuild currently
101
-
102
- Build locally using
103
-
104
- ```
105
- ./build-image.sh --variant ros-jazzy
106
- ```
107
-
108
- ### Usage
109
-
110
- For standard Python modules:
111
-
112
- ```dockerfile
113
- FROM antioch-py:latest
114
-
115
- # Install any additional packages you need
116
- RUN pip install opencv-python-headless numpy
117
-
118
- # Copy your module entrypoint
119
- # The sidecar will automatically run your module.py file
120
- COPY module.py .
121
- ```
122
-
123
- For ROS-enabled modules:
124
-
125
- ```dockerfile
126
- FROM antioch-py-ros:latest
127
-
128
- # Install ROS-specific packages if needed
129
- RUN apt-get update && apt-get install -y ros-jazzy-cv-bridge
130
-
131
- # You will probably need to source your ROS modules / install
132
- # To ensure your ROS environment is available to your module, source the ROS setup script before running the sidecar.
133
- # For example, you can add the following to your Dockerfile:
134
- RUN echo "source /opt/ros/jazzy/setup.bash" >> /etc/profile.d/ros.sh
135
- SHELL ["/bin/bash", "-c"]
136
-
137
- # If you have a custom ROS workspace, source its setup script as well:
138
- # RUN echo "source /workspace/install/setup.bash" >> /etc/profile.d/ros.sh
139
-
140
- # The sidecar will automatically run your module.py file in the ROS environment.
141
- COPY module.py .
142
- ```
143
-
144
- ## Testing Modules
145
-
146
- Antioch provides a test framework for testing modules in isolation without requiring a full deployment. The `ModuleTestHarness` runs your module in a separate process and communicates with it using the standard Antioch protocol.
147
-
148
- ### Basic Example
149
-
150
- ```python
151
- from antioch.module import Module, NodeExecution
152
- from antioch.module.test import ModuleTestHarness, TestNode, TestInput, TestOutput
153
- from common.message import Message
154
-
155
- # Define your message types
156
- class InputData(Message):
157
- _type = "input_data"
158
- value: int
159
-
160
- class OutputData(Message):
161
- _type = "output_data"
162
- result: int
163
-
164
- # Create your module
165
- class MyModule(Module):
166
- def init(self):
167
- self.add_node("process", self.process)
168
-
169
- def process(self, exec: NodeExecution):
170
- data = exec.input("data").data(InputData)
171
- if data:
172
- exec.output("result").set(OutputData(result=data.value * 2))
173
-
174
- def cleanup(self):
175
- pass
176
-
177
- # Test your module
178
- def test_my_module():
179
- with ModuleTestHarness(MyModule) as harness:
180
- # Configure the module
181
- harness.configure(
182
- module_name="my-module",
183
- nodes=[
184
- TestNode(
185
- name="process",
186
- budget=50, # 50ms time budget
187
- inputs=[TestInput(name="data", message_type="input_data")],
188
- outputs=[TestOutput(name="result", message_type="output_data")],
189
- )
190
- ],
191
- )
192
-
193
- # Execute the node
194
- result = harness.execute(
195
- "process",
196
- inputs={"data": InputData(value=21)},
197
- )
198
-
199
- # Check the output
200
- output = result.output("result", OutputData)
201
- assert output.result == 42
202
- ```
203
-
204
- The test framework handles module lifecycle, message serialization, and provides helpful error messages for common issues like budget overruns.
205
-
206
- ### Testing Modules with Hardware
207
-
208
- For modules that use hardware (cameras, IMUs, actuator groups), provide mock hardware data:
209
-
210
- ```python
211
- from antioch.module import Module, NodeExecution
212
- from antioch.module.test import ModuleTestHarness
213
- from antioch.message import Image, ImageEncoding
214
-
215
- class CameraModule(Module):
216
- def init(self):
217
- self.add_node("process_frame", self.process_frame)
218
- self.camera = self.get_rgb_camera("my_camera")
219
-
220
- def process_frame(self, exec: NodeExecution):
221
- frame = self.camera.get_frame()
222
- # Process frame...
223
- exec.output("processed").set(...)
224
-
225
- def test_camera_module():
226
- with ModuleTestHarness(CameraModule, module_yaml_path="tests/camera.yaml") as harness:
227
- # Execute node with mock camera data
228
- result = harness.execute_node(
229
- node_name="process_frame",
230
- hardware_data={
231
- "my_camera": Image(
232
- width=640,
233
- height=480,
234
- encoding=ImageEncoding.RGB8,
235
- data=b"mock_rgb_data",
236
- )
237
- }
238
- )
239
-
240
- # Verify outputs
241
- processed = result.output("processed", ProcessedData)
242
- assert processed is not None
243
-
244
- # For actuator groups, you can also verify hardware writes
245
- # write = result.get_hardware_write("my_actuator_group")
246
- ```
247
-
248
- The test harness automatically mocks the Sim RPC layer, so hardware reads and writes
249
- work exactly as they would in production, but without requiring Isaac Sim to be running.