antioch-py 2.0.2__tar.gz → 2.0.3__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.

Potentially problematic release.


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

Files changed (109) hide show
  1. antioch_py-2.0.3/MANIFEST.in +3 -0
  2. antioch_py-2.0.3/PKG-INFO +96 -0
  3. antioch_py-2.0.3/README.md +32 -0
  4. antioch_py-2.0.3/README.pypi.md +60 -0
  5. antioch_py-2.0.3/antioch_py.egg-info/PKG-INFO +96 -0
  6. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch_py.egg-info/SOURCES.txt +2 -0
  7. {antioch_py-2.0.2 → antioch_py-2.0.3}/pyproject.toml +2 -2
  8. antioch_py-2.0.2/PKG-INFO +0 -249
  9. antioch_py-2.0.2/README.md +0 -213
  10. antioch_py-2.0.2/antioch_py.egg-info/PKG-INFO +0 -249
  11. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/__init__.py +0 -0
  12. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/message.py +0 -0
  13. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/module/__init__.py +0 -0
  14. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/module/clock.py +0 -0
  15. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/module/execution.py +0 -0
  16. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/module/input.py +0 -0
  17. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/module/module.py +0 -0
  18. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/module/node.py +0 -0
  19. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/module/token.py +0 -0
  20. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/__init__.py +0 -0
  21. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/ark.py +0 -0
  22. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/asset.py +0 -0
  23. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/error.py +0 -0
  24. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/record.py +0 -0
  25. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/scene.py +0 -0
  26. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/session.py +0 -0
  27. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/task.py +0 -0
  28. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/views/__init__.py +0 -0
  29. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/views/animation.py +0 -0
  30. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/views/articulation.py +0 -0
  31. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/views/basis_curve.py +0 -0
  32. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/views/camera.py +0 -0
  33. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/views/collision.py +0 -0
  34. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/views/geometry.py +0 -0
  35. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/views/ground_plane.py +0 -0
  36. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/views/imu.py +0 -0
  37. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/views/joint.py +0 -0
  38. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/views/light.py +0 -0
  39. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/views/pir_sensor.py +0 -0
  40. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/views/radar.py +0 -0
  41. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/views/rigid_body.py +0 -0
  42. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch/session/views/xform.py +0 -0
  43. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch_py.egg-info/dependency_links.txt +0 -0
  44. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch_py.egg-info/entry_points.txt +0 -0
  45. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch_py.egg-info/requires.txt +0 -0
  46. {antioch_py-2.0.2 → antioch_py-2.0.3}/antioch_py.egg-info/top_level.txt +0 -0
  47. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/__init__.py +0 -0
  48. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/ark/__init__.py +0 -0
  49. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/ark/ark.py +0 -0
  50. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/ark/hardware.py +0 -0
  51. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/ark/kinematics.py +0 -0
  52. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/ark/module.py +0 -0
  53. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/ark/node.py +0 -0
  54. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/ark/scheduler.py +0 -0
  55. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/ark/sim.py +0 -0
  56. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/assets/__init__.py +0 -0
  57. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/constants.py +0 -0
  58. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/core/__init__.py +0 -0
  59. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/core/agent.py +0 -0
  60. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/core/auth.py +0 -0
  61. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/core/registry.py +0 -0
  62. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/core/task.py +0 -0
  63. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/__init__.py +0 -0
  64. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/annotation.py +0 -0
  65. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/array.py +0 -0
  66. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/base.py +0 -0
  67. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/camera.py +0 -0
  68. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/color.py +0 -0
  69. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/frame.py +0 -0
  70. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/image.py +0 -0
  71. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/imu.py +0 -0
  72. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/joint.py +0 -0
  73. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/log.py +0 -0
  74. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/pir.py +0 -0
  75. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/point.py +0 -0
  76. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/point_cloud.py +0 -0
  77. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/pose.py +0 -0
  78. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/quaternion.py +0 -0
  79. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/radar.py +0 -0
  80. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/types.py +0 -0
  81. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/message/vector.py +0 -0
  82. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/rome/__init__.py +0 -0
  83. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/rome/client.py +0 -0
  84. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/rome/error.py +0 -0
  85. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/__init__.py +0 -0
  86. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/environment.py +0 -0
  87. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/sim.py +0 -0
  88. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/views/__init__.py +0 -0
  89. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/views/animation.py +0 -0
  90. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/views/articulation.py +0 -0
  91. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/views/basis_curve.py +0 -0
  92. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/views/camera.py +0 -0
  93. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/views/collision.py +0 -0
  94. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/views/geometry.py +0 -0
  95. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/views/ground_plane.py +0 -0
  96. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/views/imu.py +0 -0
  97. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/views/joint.py +0 -0
  98. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/views/light.py +0 -0
  99. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/views/pir_sensor.py +0 -0
  100. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/views/radar.py +0 -0
  101. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/views/rigid_body.py +0 -0
  102. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/views/viewport.py +0 -0
  103. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/session/views/xform.py +0 -0
  104. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/utils/__init__.py +0 -0
  105. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/utils/comms.py +0 -0
  106. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/utils/logger.py +0 -0
  107. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/utils/time.py +0 -0
  108. {antioch_py-2.0.2 → antioch_py-2.0.3}/common/utils/usd.py +0 -0
  109. {antioch_py-2.0.2 → antioch_py-2.0.3}/setup.cfg +0 -0
@@ -0,0 +1,3 @@
1
+ include README.pypi.md
2
+ include LICENSE
3
+
@@ -0,0 +1,96 @@
1
+ Metadata-Version: 2.4
2
+ Name: antioch-py
3
+ Version: 2.0.3
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) robotics simulation platform.
40
+
41
+ ## Overview
42
+
43
+ The antioch-py package provides two main components:
44
+
45
+ ### Module SDK (`antioch.module`)
46
+
47
+ Build robotics software modules in Python. The Module SDK is designed to be installed inside your module's Dockerfile, giving you access to the Antioch runtime for processing sensor data, controlling actuators, and communicating with other modules.
48
+
49
+ ```python
50
+ from antioch.module import Module, Image, JointTargets
51
+
52
+ class MyController(Module):
53
+ def execute(self, image: Image) -> JointTargets:
54
+ # Your control logic here
55
+ ...
56
+ ```
57
+
58
+ ### Session SDK (`antioch.session`)
59
+
60
+ Build and orchestrate simulation sessions programmatically. The Session SDK lets you create scenes, spawn robots, configure sensors, and run tasks from Python scripts or notebooks.
61
+
62
+ ```python
63
+ from antioch.session import Session, Scene, Articulation
64
+
65
+ async with Session() as session:
66
+ scene = await session.create_scene()
67
+ robot = await scene.spawn(Articulation, usd_path="robot.usd")
68
+ await scene.play()
69
+ ```
70
+
71
+ ## Installation
72
+
73
+ ```bash
74
+ pip install antioch-py
75
+ ```
76
+
77
+ ### Docker (for modules)
78
+
79
+ ```dockerfile
80
+ FROM python:3.12-slim
81
+
82
+ RUN pip install antioch-py
83
+
84
+ COPY . /app
85
+ WORKDIR /app
86
+
87
+ CMD ["python", "main.py"]
88
+ ```
89
+
90
+ ## Documentation
91
+
92
+ Visit [antioch.com](https://antioch.com) for full documentation and examples.
93
+
94
+ ## License
95
+
96
+ MIT
@@ -0,0 +1,32 @@
1
+ # Antioch Python
2
+
3
+ Python client library for the Antioch middleware platform.
4
+
5
+ ## Installation
6
+
7
+ Authenticate your local environment with GCP via the Google Cloud CLI:
8
+
9
+ ```bash
10
+ gcloud auth login # Login to Google Cloud
11
+ gcloud config set project proof-of-concept-staging-9072 # Set the correct project
12
+ gcloud auth application-default login # Create app credentials
13
+ ```
14
+
15
+ This project uses [uv](https://github.com/astral-sh/uv), a fast Python package and project manager. Install it and set up authentication:
16
+
17
+ ```bash
18
+ # Install uv
19
+ curl -LsSf https://astral.sh/uv/install.sh | sh
20
+
21
+ # Install keyring authentication globally for uv
22
+ uv tool install keyring --with keyrings.google-artifactregistry-auth
23
+
24
+ # Install all default groups in one step
25
+ uv sync
26
+ ```
27
+
28
+ Install the pre-commit hooks to auto-run `uv sync` and `ruff format` on Git commit:
29
+
30
+ ```bash
31
+ uv run pre-commit install
32
+ ```
@@ -0,0 +1,60 @@
1
+ # antioch-py
2
+
3
+ Python SDK for the [Antioch](https://antioch.com) robotics simulation platform.
4
+
5
+ ## Overview
6
+
7
+ The antioch-py package provides two main components:
8
+
9
+ ### Module SDK (`antioch.module`)
10
+
11
+ Build robotics software modules in Python. The Module SDK is designed to be installed inside your module's Dockerfile, giving you access to the Antioch runtime for processing sensor data, controlling actuators, and communicating with other modules.
12
+
13
+ ```python
14
+ from antioch.module import Module, Image, JointTargets
15
+
16
+ class MyController(Module):
17
+ def execute(self, image: Image) -> JointTargets:
18
+ # Your control logic here
19
+ ...
20
+ ```
21
+
22
+ ### Session SDK (`antioch.session`)
23
+
24
+ Build and orchestrate simulation sessions programmatically. The Session SDK lets you create scenes, spawn robots, configure sensors, and run tasks from Python scripts or notebooks.
25
+
26
+ ```python
27
+ from antioch.session import Session, Scene, Articulation
28
+
29
+ async with Session() as session:
30
+ scene = await session.create_scene()
31
+ robot = await scene.spawn(Articulation, usd_path="robot.usd")
32
+ await scene.play()
33
+ ```
34
+
35
+ ## Installation
36
+
37
+ ```bash
38
+ pip install antioch-py
39
+ ```
40
+
41
+ ### Docker (for modules)
42
+
43
+ ```dockerfile
44
+ FROM python:3.12-slim
45
+
46
+ RUN pip install antioch-py
47
+
48
+ COPY . /app
49
+ WORKDIR /app
50
+
51
+ CMD ["python", "main.py"]
52
+ ```
53
+
54
+ ## Documentation
55
+
56
+ Visit [antioch.com](https://antioch.com) for full documentation and examples.
57
+
58
+ ## License
59
+
60
+ MIT
@@ -0,0 +1,96 @@
1
+ Metadata-Version: 2.4
2
+ Name: antioch-py
3
+ Version: 2.0.3
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) robotics simulation platform.
40
+
41
+ ## Overview
42
+
43
+ The antioch-py package provides two main components:
44
+
45
+ ### Module SDK (`antioch.module`)
46
+
47
+ Build robotics software modules in Python. The Module SDK is designed to be installed inside your module's Dockerfile, giving you access to the Antioch runtime for processing sensor data, controlling actuators, and communicating with other modules.
48
+
49
+ ```python
50
+ from antioch.module import Module, Image, JointTargets
51
+
52
+ class MyController(Module):
53
+ def execute(self, image: Image) -> JointTargets:
54
+ # Your control logic here
55
+ ...
56
+ ```
57
+
58
+ ### Session SDK (`antioch.session`)
59
+
60
+ Build and orchestrate simulation sessions programmatically. The Session SDK lets you create scenes, spawn robots, configure sensors, and run tasks from Python scripts or notebooks.
61
+
62
+ ```python
63
+ from antioch.session import Session, Scene, Articulation
64
+
65
+ async with Session() as session:
66
+ scene = await session.create_scene()
67
+ robot = await scene.spawn(Articulation, usd_path="robot.usd")
68
+ await scene.play()
69
+ ```
70
+
71
+ ## Installation
72
+
73
+ ```bash
74
+ pip install antioch-py
75
+ ```
76
+
77
+ ### Docker (for modules)
78
+
79
+ ```dockerfile
80
+ FROM python:3.12-slim
81
+
82
+ RUN pip install antioch-py
83
+
84
+ COPY . /app
85
+ WORKDIR /app
86
+
87
+ CMD ["python", "main.py"]
88
+ ```
89
+
90
+ ## Documentation
91
+
92
+ Visit [antioch.com](https://antioch.com) for full documentation and examples.
93
+
94
+ ## License
95
+
96
+ MIT
@@ -1,4 +1,6 @@
1
+ MANIFEST.in
1
2
  README.md
3
+ README.pypi.md
2
4
  pyproject.toml
3
5
  antioch/__init__.py
4
6
  antioch/message.py
@@ -1,8 +1,8 @@
1
1
  [project]
2
2
  name = "antioch-py"
3
- version = "2.0.2"
3
+ version = "2.0.3"
4
4
  description = "The Antioch Python SDK"
5
- readme = "README.md"
5
+ readme = "README.pypi.md"
6
6
  license = "MIT"
7
7
  requires-python = ">=3.12,<3.13"
8
8
  authors = [
antioch_py-2.0.2/PKG-INFO DELETED
@@ -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.