simulo-interfaces 0.11.0__tar.gz → 0.12.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 (55) hide show
  1. {simulo_interfaces-0.11.0/src/simulo_interfaces.egg-info → simulo_interfaces-0.12.0}/PKG-INFO +1 -1
  2. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/pyproject.toml +6 -3
  3. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/authoring/__init__.py +6 -4
  4. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/authoring/pose.py +2 -3
  5. simulo_interfaces-0.12.0/src/simulo/interfaces/authoring/prop.py +210 -0
  6. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/platform/__init__.py +1 -14
  7. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/runtime/__init__.py +1 -2
  8. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0/src/simulo_interfaces.egg-info}/PKG-INFO +1 -1
  9. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo_interfaces.egg-info/SOURCES.txt +1 -0
  10. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/MANIFEST.in +0 -0
  11. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/PYPI.md +0 -0
  12. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/setup.cfg +0 -0
  13. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/__init__.py +0 -0
  14. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/authoring/actuator.py +0 -0
  15. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/authoring/asset.py +0 -0
  16. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/authoring/entity.py +0 -0
  17. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/authoring/light.py +0 -0
  18. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/authoring/materials.py +0 -0
  19. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/authoring/physics.py +0 -0
  20. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/authoring/primitives.py +0 -0
  21. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/authoring/record.py +0 -0
  22. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/authoring/robot.py +0 -0
  23. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/authoring/scene.py +0 -0
  24. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/authoring/sensor.py +0 -0
  25. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/authoring/terrain.py +0 -0
  26. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/authoring/visual.py +0 -0
  27. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/authoring/world.py +0 -0
  28. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/exceptions.py +0 -0
  29. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/ids.py +0 -0
  30. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/platform/app.py +0 -0
  31. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/platform/artifacts.py +0 -0
  32. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/platform/asset.py +0 -0
  33. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/platform/asset_catalog.py +0 -0
  34. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/platform/callbacks.py +0 -0
  35. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/platform/debug.py +0 -0
  36. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/platform/domain.py +0 -0
  37. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/platform/enums.py +0 -0
  38. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/platform/manifest.py +0 -0
  39. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/platform/runs.py +0 -0
  40. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/platform/runtime.py +0 -0
  41. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/platform/submit.py +0 -0
  42. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/platform/volume.py +0 -0
  43. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/py.typed +0 -0
  44. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/runtime/anomaly.py +0 -0
  45. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/runtime/components.py +0 -0
  46. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/runtime/env.py +0 -0
  47. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/runtime/player.py +0 -0
  48. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/runtime/policy.py +0 -0
  49. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/runtime/scenario.py +0 -0
  50. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/runtime/task.py +0 -0
  51. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/runtime/tensors.py +0 -0
  52. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo/interfaces/runtime/trainer.py +0 -0
  53. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo_interfaces.egg-info/dependency_links.txt +0 -0
  54. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo_interfaces.egg-info/requires.txt +0 -0
  55. {simulo_interfaces-0.11.0 → simulo_interfaces-0.12.0}/src/simulo_interfaces.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: simulo-interfaces
3
- Version: 0.11.0
3
+ Version: 0.12.0
4
4
  Summary: Type contracts for the Simulo SDK. Installed automatically as a dependency of the simulo package.
5
5
  Author-email: Simulo Team <team@simulo.ai>
6
6
  License: BSD-3-Clause
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "simulo-interfaces"
7
- version = "0.11.0"
7
+ version = "0.12.0"
8
8
  description = "Type contracts for the Simulo SDK. Installed automatically as a dependency of the simulo package."
9
9
  readme = "PYPI.md"
10
10
  requires-python = ">=3.11"
@@ -26,8 +26,11 @@ classifiers = [
26
26
  dependencies = []
27
27
 
28
28
  [project.optional-dependencies]
29
- # black/isort/ruff/mypy pinned EXACT, not >=: see simulo-backend/pyproject.toml's
30
- # `dev` extra for the full rationale (2026-08-01 ruff 0.15.21->0.16.1 CI incident).
29
+ # black/isort/ruff/mypy pinned EXACT, not >=: these are rule-set tools whose
30
+ # defaults change between releases, so an unbounded lower bound lets CI silently
31
+ # resolve a newer release than a developer's environment has — "clean locally" and
32
+ # "hundreds of errors in CI" both true of one commit (2026-08-01: ruff 0.15.21 ->
33
+ # 0.16.1 flagged 1088 findings from new default rules, zero of them real).
31
34
  # Keep in lockstep with `.github/workflows/simulo-interfaces-ci.yml`'s
32
35
  # `ruff`/`black`/`isort`/`mypy` steps, which resolve their versions from THIS extra
33
36
  # (`pip install -e ".[dev]"`).
@@ -106,10 +106,11 @@ from simulo.interfaces.authoring.primitives import (
106
106
  Sphere,
107
107
  Transform,
108
108
  )
109
+ from simulo.interfaces.authoring.prop import PropProtocol, PropStateProtocol
109
110
  from simulo.interfaces.authoring.record import RecordConfig
110
111
  from simulo.interfaces.authoring.robot import RobotProtocol, RobotStateProtocol
111
112
  from simulo.interfaces.authoring.scene import SceneGroupProtocol, SceneProtocol
112
- from simulo.interfaces.authoring.sensor import CameraProtocol, SensorProtocol
113
+ from simulo.interfaces.authoring.sensor import CameraProtocol
113
114
  from simulo.interfaces.authoring.terrain import (
114
115
  GroundPlane,
115
116
  RoughTerrain,
@@ -180,11 +181,12 @@ __all__ = [
180
181
  # scene (MIRROR — the concrete classes live in the backend package)
181
182
  "SceneProtocol",
182
183
  "SceneGroupProtocol",
183
- # robot / sensor / actuator (MIRROR — the concrete classes live in the
184
- # backend package and explicitly inherit these Protocols)
184
+ # robot / prop / sensor / actuator (MIRROR — the concrete classes live in
185
+ # the backend package and explicitly inherit these Protocols)
185
186
  "RobotProtocol",
186
187
  "RobotStateProtocol",
187
- "SensorProtocol",
188
+ "PropProtocol",
189
+ "PropStateProtocol",
188
190
  "CameraProtocol",
189
191
  "ActuatorProtocol",
190
192
  ]
@@ -17,8 +17,8 @@ class Pose:
17
17
  xyz: Position as (x, y, z)
18
18
  quat_wxyz: Orientation as quaternion (w, x, y, z)
19
19
 
20
- Example:
21
- ```python
20
+ Example::
21
+
22
22
  # Using named arguments
23
23
  pose = Pose(position=[0.5, 0.3, 0.7], orientation=[1, 0, 0, 0])
24
24
 
@@ -27,7 +27,6 @@ class Pose:
27
27
 
28
28
  # Position only (identity rotation)
29
29
  pose = Pose.from_xyz(0.5, 0.3, 0.7)
30
- ```
31
30
  """
32
31
 
33
32
  xyz: Tuple[float, float, float] = (0.0, 0.0, 0.0)
@@ -0,0 +1,210 @@
1
+ """``PropProtocol`` — the declared contract for a movable scene prop.
2
+
3
+ A MIRROR, not a relocation (the same mechanism as the Robot and Scene
4
+ contracts in this package): the concrete ``Prop`` implementation stays in the
5
+ backend package, because reading and writing a prop's pose reaches through a
6
+ live engine handle and cannot exist in a zero-dependency package. What CAN
7
+ live here is the declared public surface — what a prop is constructed from,
8
+ how its live state is read, and how its pose is written.
9
+
10
+ Why this contract exists at all
11
+ -------------------------------
12
+
13
+ A scene holds two kinds of movable thing: robots, which the simulation drives
14
+ through joints, and *props* — the block on the table, the crate to push, the
15
+ ball to catch. Robots have carried a full pose surface since the beginning
16
+ (``robot.state.pose``, ``set_root_pose``, ``reset``). Props carried none: a
17
+ shape handed to ``scene.add(...)`` is pure authoring data, so the only way to
18
+ reach the spawned body's pose was the engine-private scene index.
19
+
20
+ That gap is what kept manipulation demos *scripted*. An episodic task must
21
+ re-randomise its object at the start of every episode and read the object's
22
+ height back to score the lift — both of which are prop pose access. This
23
+ contract closes it.
24
+
25
+ ``PrimitiveShape``, not every entity
26
+ ------------------------------------
27
+
28
+ A prop is built from a :class:`~simulo.interfaces.authoring.primitives.PrimitiveShape`
29
+ carrying **rigid** physics. That restriction is the honest one rather than a
30
+ convenience: a pose that can be read and written is the simulation's own
31
+ rigid-body state, and only a rigid body has one. A visual-only shape (no
32
+ physics) and a deformable one have no rigid-body pose to write, so the
33
+ implementation refuses them at construction, naming the prop — rather than
34
+ accepting them and silently doing nothing at reset time, which would surface
35
+ much later as "my object never moves".
36
+
37
+ A shape that only needs to be *visible* does not need a prop at all: hand it
38
+ straight to ``scene.add(shape, at=...)`` exactly as before. ``Prop`` is
39
+ strictly the opt-in for "I also need to read or write where this thing is".
40
+
41
+ Tensors, not ``Pose``
42
+ ---------------------
43
+
44
+ Every batched member here is ``TensorLike`` with the environment count as its
45
+ leading dimension, and the write methods take the same. ``Pose`` remains the
46
+ *authoring* type — where the prop spawns, written once as
47
+ ``Cuboid(pose=Pose.from_xyz(...))``. It is deliberately NOT the runtime type:
48
+ a ``Pose`` is one pose, and the entire purpose of this surface is giving each
49
+ of thousands of environments a *different* pose on the same call. See
50
+ ``PropProtocol.set_pose`` for the full reasoning.
51
+
52
+ Enforcement is the standard four layers for a mirror — the type checker alone
53
+ is NOT sufficient (measured on the Scene mirror): mypy catches signature
54
+ *shape* divergence at the backend definition site but is silent on parameter
55
+ renames and on a property degrading to a plain attribute. Those are caught by
56
+ the signature-conformance test in the backend package's suite (per-member,
57
+ both directions, plus member-set equality with a pinned omissions allowlist),
58
+ and the constructor is pinned separately by a ``__call__``-Protocol in the
59
+ backend's static conformance checks (type checkers exempt ``__init__`` from
60
+ override checks). The Protocol stays structural for any other implementer.
61
+ """
62
+
63
+ from typing import Optional, Protocol, runtime_checkable
64
+
65
+ from simulo.interfaces.authoring.primitives import PrimitiveShape
66
+ from simulo.interfaces.runtime.tensors import TensorLike
67
+
68
+
69
+ @runtime_checkable
70
+ class PropStateProtocol(Protocol):
71
+ """The live prop-state contract — batched, read-only, zero-copy.
72
+
73
+ Obtained from a prop as ``prop.state``; never constructed directly. The
74
+ three members are exactly the rigid-body half of
75
+ :class:`~simulo.interfaces.authoring.robot.RobotStateProtocol` and carry
76
+ the same names for the same quantities — a prop has no joints, so the
77
+ three joint members simply do not appear. Code that reads
78
+ ``robot.state.pose`` reads ``prop.state.pose`` identically.
79
+
80
+ Each member is a live view of the simulation's own state buffers: reading
81
+ one returns the current values without copying, at the same cost inside a
82
+ training loop's hot path as anywhere else. All members carry the
83
+ environment batch as their leading dimension (the scene's ``num_envs``).
84
+
85
+ **Read a member each time you need it — do not hold the returned tensor
86
+ across steps, and do not write into it.** The tensor IS the simulation's
87
+ own memory: the engine refreshes these buffers by rebinding them to new
88
+ tensors, so a tensor held across a step can silently serve stale values,
89
+ and writing into one writes into the simulation. The accessor
90
+ (``prop.state`` itself) may be held freely.
91
+
92
+ Members raise ``RuntimeError`` until the simulation runtime has attached
93
+ the prop — read them from ``on_start`` onward. The ``state`` accessor
94
+ itself is always available and is the same object on every access.
95
+ """
96
+
97
+ @property
98
+ def pose(self) -> TensorLike:
99
+ """Pose in the world frame, shape ``(num_envs, 7)``:
100
+ ``[x, y, z, qw, qx, qy, qz]`` (position + w-first quaternion)."""
101
+ ...
102
+
103
+ @property
104
+ def linear_velocity(self) -> TensorLike:
105
+ """Linear velocity in the world frame, shape ``(num_envs, 3)``:
106
+ ``[vx, vy, vz]``."""
107
+ ...
108
+
109
+ @property
110
+ def angular_velocity(self) -> TensorLike:
111
+ """Angular velocity in the world frame, shape ``(num_envs, 3)``:
112
+ ``[wx, wy, wz]``."""
113
+ ...
114
+
115
+
116
+ @runtime_checkable
117
+ class PropProtocol(Protocol):
118
+ """The prop authoring contract — a rigid body whose pose you can read and write.
119
+
120
+ This is the surface authoring code may rely on when it creates a prop,
121
+ adds it to a scene, and moves it: the shape it was built from, its
122
+ identity in the scene, its live state, its spawn pose, and the pose /
123
+ velocity writes an episodic reset needs.
124
+ """
125
+
126
+ # -- Construction-time configuration ----------------------------------
127
+
128
+ shape: PrimitiveShape
129
+ """The primitive shape this prop spawns, carrying its size, material, and
130
+ rigid physics. The shape's own ``pose`` is where the prop spawns."""
131
+
132
+ # -- Identity and attachment ------------------------------------------
133
+
134
+ @property
135
+ def name(self) -> Optional[str]:
136
+ """Prop name — taken from the shape, or set by the scene when added."""
137
+ ...
138
+
139
+ @property
140
+ def path(self) -> Optional[str]:
141
+ """Scene path — set by the scene when the prop is added."""
142
+ ...
143
+
144
+ @property
145
+ def state(self) -> PropStateProtocol:
146
+ """The grouped live prop state — the supported, typed state surface.
147
+
148
+ Always available (the accessor is the same object on every access);
149
+ its members read straight through to the simulation's state buffers
150
+ and raise ``RuntimeError`` until the simulation runtime has attached
151
+ the prop — read them from ``on_start`` onward.
152
+ """
153
+ ...
154
+
155
+ @property
156
+ def default_pose(self) -> TensorLike:
157
+ """The prop's spawn pose in the **world** frame, ``(num_envs, 7)``.
158
+
159
+ The pose the prop was authored at, already offset by each
160
+ environment's own origin — so it is directly comparable with
161
+ ``state.pose`` and directly usable as the base for a randomised
162
+ reset. Index it with the environments being reset
163
+ (``prop.default_pose[env_ids]``), perturb, and write it back with
164
+ :meth:`set_pose`.
165
+
166
+ Raises ``RuntimeError`` until the simulation runtime has attached the
167
+ prop.
168
+ """
169
+ ...
170
+
171
+ # -- Pose writes ------------------------------------------------------
172
+
173
+ def set_pose(self, pose: TensorLike, env_ids: Optional[TensorLike] = ...) -> None:
174
+ """Write the prop's pose directly (teleport, not control), world frame.
175
+
176
+ Args:
177
+ pose: ``(num_envs, 7)`` — or ``(len(env_ids), 7)`` when ``env_ids``
178
+ is given — as ``[x, y, z, qw, qx, qy, qz]``.
179
+ env_ids: Environment indices to write; ``None`` writes every
180
+ environment. Passing the subset being reset is what makes a
181
+ partial episodic reset possible: the environments that did not
182
+ finish keep the pose they had.
183
+ """
184
+ ...
185
+
186
+ def set_velocity(self, velocity: TensorLike, env_ids: Optional[TensorLike] = ...) -> None:
187
+ """Write the prop's velocity directly (teleport, not control), world frame.
188
+
189
+ Args:
190
+ velocity: ``(num_envs, 6)`` — or ``(len(env_ids), 6)`` when
191
+ ``env_ids`` is given — as ``[vx, vy, vz, wx, wy, wz]``.
192
+ env_ids: Environment indices to write; ``None`` writes every
193
+ environment.
194
+
195
+ A reset that moves a prop should zero its velocity too, or the body
196
+ arrives at its new pose still carrying the momentum it had at the end
197
+ of the previous episode.
198
+ """
199
+ ...
200
+
201
+ # -- Lifecycle --------------------------------------------------------
202
+
203
+ def reset(self, env_ids: Optional[TensorLike] = ...) -> None:
204
+ """Return the prop to its spawn pose with zero velocity.
205
+
206
+ Args:
207
+ env_ids: Environment indices to reset; ``None`` resets every
208
+ environment.
209
+ """
210
+ ...
@@ -7,7 +7,6 @@ implementation-free — concrete behaviour lives in the future
7
7
  ``simulo`` client and the ``simulo-backend`` SDK.
8
8
  """
9
9
 
10
- from simulo.interfaces.platform.app import AppProtocol, JobFunctionProtocol, Mount
11
10
  from simulo.interfaces.platform.artifacts import (
12
11
  DECLARED_OUTPUT_MISSING_CODE,
13
12
  JOB_ARTIFACT_DOWNLOAD_ROUTE_TEMPLATE,
@@ -97,7 +96,7 @@ from simulo.interfaces.platform.asset_catalog import (
97
96
  from simulo.interfaces.platform.callbacks import JobCallbackProtocol
98
97
  from simulo.interfaces.platform.debug import DebugSessionProtocol, ReplaySessionProtocol, VisualizationSessionProtocol
99
98
  from simulo.interfaces.platform.domain import Checkpoint, Job, Package, Project, Resource, Tag, TrainedModel
100
- from simulo.interfaces.platform.enums import ArtifactKind, JobStatus, ResourceKind, ResumePolicy
99
+ from simulo.interfaces.platform.enums import ArtifactKind
101
100
  from simulo.interfaces.platform.manifest import (
102
101
  FINDING_CLASSIFICATIONS,
103
102
  MAX_PREFLIGHT_BODY_BYTES,
@@ -124,7 +123,6 @@ from simulo.interfaces.platform.runs import (
124
123
  LOG_CHUNK_MAX_BYTES,
125
124
  LOG_TAIL_MAX_BYTES,
126
125
  TERMINAL_JOB_STATUSES,
127
- JobRecord,
128
126
  )
129
127
  from simulo.interfaces.platform.runtime import RuntimeProtocol
130
128
  from simulo.interfaces.platform.submit import (
@@ -158,8 +156,6 @@ from simulo.interfaces.platform.submit import (
158
156
  WORKER_JOB_RECORDINGS_PRESIGN_ROUTE_TEMPLATE,
159
157
  WORKER_JOB_RECORDINGS_ROUTE_TEMPLATE,
160
158
  WORKER_LEASE_HEADER,
161
- ModelRecord,
162
- RecordingRecord,
163
159
  canonical_pypi_name,
164
160
  is_platform_pinned,
165
161
  )
@@ -167,9 +163,6 @@ from simulo.interfaces.platform.volume import VolumeProtocol
167
163
 
168
164
  __all__ = [
169
165
  # enums
170
- "JobStatus",
171
- "ResumePolicy",
172
- "ResourceKind",
173
166
  "ArtifactKind",
174
167
  # domain dataclasses
175
168
  "Tag",
@@ -210,7 +203,6 @@ __all__ = [
210
203
  "OUTPUT_FLAG_ANOMALY",
211
204
  "DECLARED_OUTPUT_MISSING_CODE",
212
205
  # job-run contract (run record schema + jobs HTTP API shape)
213
- "JobRecord",
214
206
  "TERMINAL_JOB_STATUSES",
215
207
  "JOBS_API_DEFAULT_PORT",
216
208
  "JOBS_ROUTE",
@@ -249,8 +241,6 @@ __all__ = [
249
241
  "MAX_COMPLETE_MESSAGE_CHARS",
250
242
  "MAX_COMPLETE_REASON_CODE_CHARS",
251
243
  "MODEL_KINDS",
252
- "ModelRecord",
253
- "RecordingRecord",
254
244
  "RESERVED_RUNTIME_ENV_KEYS",
255
245
  "RESERVED_RUNTIME_ENV_PREFIXES",
256
246
  "PLATFORM_PINNED_PACKAGES",
@@ -337,9 +327,6 @@ __all__ = [
337
327
  "AssetProtocol",
338
328
  "VolumeProtocol",
339
329
  "JobCallbackProtocol",
340
- "JobFunctionProtocol",
341
- "AppProtocol",
342
- "Mount",
343
330
  "DebugSessionProtocol",
344
331
  "ReplaySessionProtocol",
345
332
  "VisualizationSessionProtocol",
@@ -28,14 +28,13 @@ from simulo.interfaces.runtime.policy import PolicyProtocol
28
28
  from simulo.interfaces.runtime.scenario import ScenarioProtocol
29
29
  from simulo.interfaces.runtime.task import TaskProtocol
30
30
  from simulo.interfaces.runtime.tensors import TensorLike
31
- from simulo.interfaces.runtime.trainer import PolicyExporterProtocol, TrainerProtocol
31
+ from simulo.interfaces.runtime.trainer import TrainerProtocol
32
32
 
33
33
  __all__ = [
34
34
  "TensorLike",
35
35
  "TaskProtocol",
36
36
  "PolicyProtocol",
37
37
  "TrainerProtocol",
38
- "PolicyExporterProtocol",
39
38
  "PlayerProtocol",
40
39
  "LearningEnvProtocol",
41
40
  "ScenarioProtocol",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: simulo-interfaces
3
- Version: 0.11.0
3
+ Version: 0.12.0
4
4
  Summary: Type contracts for the Simulo SDK. Installed automatically as a dependency of the simulo package.
5
5
  Author-email: Simulo Team <team@simulo.ai>
6
6
  License: BSD-3-Clause
@@ -14,6 +14,7 @@ src/simulo/interfaces/authoring/materials.py
14
14
  src/simulo/interfaces/authoring/physics.py
15
15
  src/simulo/interfaces/authoring/pose.py
16
16
  src/simulo/interfaces/authoring/primitives.py
17
+ src/simulo/interfaces/authoring/prop.py
17
18
  src/simulo/interfaces/authoring/record.py
18
19
  src/simulo/interfaces/authoring/robot.py
19
20
  src/simulo/interfaces/authoring/scene.py