sequence-base 0.4.23__tar.gz → 0.4.24__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 (108) hide show
  1. {sequence_base-0.4.23 → sequence_base-0.4.24}/PKG-INFO +1 -1
  2. {sequence_base-0.4.23 → sequence_base-0.4.24}/pyproject.toml +1 -1
  3. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/constants/version.py +2 -1
  4. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/deployments.py +13 -0
  5. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/msgpack_io.py +102 -10
  6. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ActRequest.json +1 -1
  7. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ActResponse.json +1 -1
  8. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ActionChunk.json +1 -1
  9. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ActionContract.json +1 -1
  10. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ActionStep.json +1 -1
  11. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/AdapterPair.json +1 -1
  12. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/AddLocal.json +1 -1
  13. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Autoscaler.json +1 -1
  14. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/BenchmarkConditionSpec.json +1 -1
  15. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/BenchmarkRegisterRequest.json +1 -1
  16. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/BenchmarkSpec.json +2 -2
  17. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
  18. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/BootstrapResponse.json +1 -1
  19. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Camera.json +1 -1
  20. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/CodeBundle.json +1 -1
  21. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Concurrency.json +1 -1
  22. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Conditions.json +1 -1
  23. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ConnectRequest.json +1 -1
  24. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ConnectResponse.json +1 -1
  25. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/DeploymentAccepted.json +1 -1
  26. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/DeploymentPolicy.json +33 -1
  27. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/DeploymentRequest.json +33 -1
  28. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
  29. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Embodiment.json +1 -1
  30. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ErrorBody.json +1 -1
  31. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ErrorCodes.json +1 -1
  32. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Estimate.json +1 -1
  33. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/EvalDryRunResponse.json +1 -1
  34. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/EvalReport.json +1 -1
  35. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/EvalRequest.json +1 -1
  36. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/EvalResponse.json +1 -1
  37. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ImageFrame.json +1 -1
  38. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ImageSpec.json +1 -1
  39. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ImageStepAddLocal.json +1 -1
  40. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ImageStepApt.json +1 -1
  41. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ImageStepEnv.json +1 -1
  42. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ImageStepRun.json +1 -1
  43. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ImageStepTemplateFiles.json +1 -1
  44. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ImageStepUvPip.json +1 -1
  45. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/InferParam.json +1 -1
  46. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Lease.json +1 -1
  47. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/MetricAgg.json +1 -1
  48. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Observation.json +1 -1
  49. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ObservationContract.json +1 -1
  50. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/PolicyRegistration.json +2 -2
  51. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/PolicySpec.json +1 -1
  52. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Proprioception.json +1 -1
  53. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/RenderSpec.json +1 -1
  54. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ReplaySpec.json +1 -1
  55. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Resources.json +1 -1
  56. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/RolloutResult.json +1 -1
  57. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/SecretCreateRequest.json +1 -1
  58. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/SecretInfo.json +1 -1
  59. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/SecretRef.json +1 -1
  60. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/SeqFlags.json +1 -1
  61. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Step.json +1 -1
  62. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/TaskAgg.json +1 -1
  63. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/TemplateFiles.json +1 -1
  64. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Timeouts.json +1 -1
  65. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/UploadTarget.json +1 -1
  66. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Variant.json +1 -1
  67. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/VolumeFile.json +1 -1
  68. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/VolumeInfo.json +1 -1
  69. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/VolumeMount.json +1 -1
  70. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/VolumeRef.json +1 -1
  71. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
  72. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
  73. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/WarmingError.json +1 -1
  74. {sequence_base-0.4.23 → sequence_base-0.4.24}/.gitignore +0 -0
  75. {sequence_base-0.4.23 → sequence_base-0.4.24}/README.md +0 -0
  76. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/__init__.py +0 -0
  77. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/auth.py +0 -0
  78. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/codec/__init__.py +0 -0
  79. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/codec/image.py +0 -0
  80. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/constants/__init__.py +0 -0
  81. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/constants/cards.py +0 -0
  82. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/constants/headers.py +0 -0
  83. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/constants/limits.py +0 -0
  84. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/__init__.py +0 -0
  85. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/accounts.py +0 -0
  86. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/act.py +0 -0
  87. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/adapters.py +0 -0
  88. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/benchmarks.py +0 -0
  89. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/connect.py +0 -0
  90. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/errors.py +0 -0
  91. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/eval.py +0 -0
  92. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/flags.py +0 -0
  93. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/io.py +0 -0
  94. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/policy.py +0 -0
  95. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/templates.py +0 -0
  96. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/volumes.py +0 -0
  97. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/wire.py +0 -0
  98. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/errors/__init__.py +0 -0
  99. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/errors/transport.py +0 -0
  100. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/obs/__init__.py +0 -0
  101. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/obs/log.py +0 -0
  102. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/obs/rid.py +0 -0
  103. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/presets/__init__.py +0 -0
  104. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/presets/frames.py +0 -0
  105. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/presets/robot_arm.py +0 -0
  106. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schema_export.py +0 -0
  107. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/telemetry/__init__.py +0 -0
  108. {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/telemetry/events.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sequence-base
3
- Version: 0.4.23
3
+ Version: 0.4.24
4
4
  Summary: Shared foundation for the Sequences platform — wire contract, correlation, error taxonomy, constants. Used by the robot SDK, gateway, and container harness.
5
5
  Project-URL: Changelog, https://generalsequences.com/docs/changelog/
6
6
  Requires-Python: >=3.10
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sequence-base"
3
- version = "0.4.23"
3
+ version = "0.4.24"
4
4
  description = "Shared foundation for the Sequences platform — wire contract, correlation, error taxonomy, constants. Used by the robot SDK, gateway, and container harness."
5
5
  requires-python = ">=3.10"
6
6
  dependencies = ["pydantic>=2.0"]
@@ -4,7 +4,8 @@
4
4
 
5
5
 
6
6
 
7
- CONTRACT_VERSION = "0.5.20"
7
+ CONTRACT_VERSION = "0.5.21"
8
+
8
9
 
9
10
 
10
11
 
@@ -202,6 +202,19 @@ class DeploymentPolicy(BaseModel):
202
202
 
203
203
  plan_every_s: float | None = Field(default=None, gt=0)
204
204
 
205
+
206
+
207
+
208
+ own_observations: Literal["latest", "since_last_act"] | None = None
209
+ own_actions: Literal["one", "steps"] | None = None
210
+
211
+ @model_validator(mode="after")
212
+ def _own_io(self) -> "DeploymentPolicy":
213
+ if (self.own_observations or self.own_actions) and (self.action or self.observation or self.embodiments):
214
+ raise ValueError("own_observations and own_actions are for a policy of its own inputs and outputs; this one "
215
+ "declares the robot-arm contract, where observation history and the action chunk say it")
216
+ return self
217
+
205
218
  @model_validator(mode="after")
206
219
  def _param_names(self) -> "DeploymentPolicy":
207
220
  for name in self.params or {}:
@@ -6,7 +6,8 @@ Written in plain Python, so neither a worker nor a client installs a msgpack pac
6
6
  In one sentence: a client takes the act's envelope ({"inputs", "seed", "episode_id", "params", ...}) → `pack` writes it
7
7
  as msgpack, each numpy array as the map msgpack-numpy writes ({"nd": True, "type", "kind", "shape", "data"}) → a worker
8
8
  that names FORMAT among its formats `unpack`s it back to the same dict, arrays as arrays, and serves it as it serves a
9
- JSON act; an answer asked for in msgpack (Accept: MEDIA_TYPE) comes back the same way.
9
+ JSON act; an answer asked for in msgpack (Accept: MEDIA_TYPE) comes back the same way - its arrays, to a client
10
+ without numpy, as the lists their tolist() gives, what the answer in JSON holds.
10
11
 
11
12
  WHY a media type of its own: a worker reads a body that is not JSON as the policy's own inputs and hands it on
12
13
  untouched - an `application/msgpack` body included, which some policies decode themselves - so a client sends this
@@ -24,8 +25,10 @@ anything.
24
25
  """
25
26
  from __future__ import annotations
26
27
 
28
+ import re
27
29
  import struct
28
- from typing import Any
30
+ import sys
31
+ from typing import Any, NamedTuple
29
32
 
30
33
  __all__ = ["FORMAT", "MAX_DEPTH", "MEDIA_TYPE", "MsgpackError", "pack", "unpack"]
31
34
 
@@ -154,9 +157,10 @@ def _readable_dtype(dtype) -> None:
154
157
 
155
158
 
156
159
  def unpack(data: bytes) -> Any:
157
- """The one msgpack value `data` holds, numpy arrays (msgpack-numpy's or openpi's layout) back as read-only arrays.
158
- MsgpackError: truncated, more than one value, an extension type, nested past MAX_DEPTH, a length past the body, or
159
- an array whose dtype holds objects."""
160
+ """The one msgpack value `data` holds, numpy arrays (msgpack-numpy's or openpi's layout) back as read-only arrays -
161
+ or, where numpy is not installed, as the nested lists of plain values their tolist() gives, what a JSON answer
162
+ holds. MsgpackError: truncated, more than one value, an extension type, nested past MAX_DEPTH, a length past the
163
+ body, or an array whose dtype holds objects."""
160
164
  view = memoryview(bytes(data)) if not isinstance(data, bytes) else memoryview(data)
161
165
  value, at = _Reader(view).read(0, 0)
162
166
  if at != len(view):
@@ -284,12 +288,13 @@ def _array_of(m: dict) -> Any:
284
288
  dtype, data = _dtype(_field(m, "type")), _field(m, "data")
285
289
  if not isinstance(data, bytes) or len(data) != dtype.itemsize:
286
290
  raise MsgpackError(f"a numpy {dtype} scalar whose data is not {dtype.itemsize} bytes")
287
- return _numpy().frombuffer(data, dtype=dtype, count=1)[0]
291
+ np = _numpy()
292
+ return _plain_items(dtype, data, 1)[0] if np is None else np.frombuffer(data, dtype=dtype, count=1)[0]
288
293
  if generic is True and has("dtype", "data"):
289
294
  dtype, value = _dtype(_field(m, "dtype")), _field(m, "data")
290
295
  if not isinstance(value, (bool, int, float, str, bytes)):
291
296
  raise MsgpackError("a numpy scalar's map whose data is not a plain value")
292
- return dtype.type(value)
297
+ return value if _numpy() is None else dtype.type(value)
293
298
  return m
294
299
 
295
300
 
@@ -298,31 +303,118 @@ def _array(descr, shape, data):
298
303
  if not isinstance(shape, list) or not all(isinstance(d, int) and not isinstance(d, bool) and d >= 0
299
304
  for d in shape) or not isinstance(data, bytes):
300
305
  raise MsgpackError("a numpy array's map without a shape of non-negative ints or its data as bytes")
306
+ if len(shape) > _MAX_DIMS:
307
+ raise MsgpackError(f"a numpy array of {len(shape)} dimensions: numpy's own are {_MAX_DIMS} at most")
301
308
  count = 1
302
309
  for d in shape:
303
310
  count *= d
304
311
  if len(data) != count * dtype.itemsize:
305
312
  raise MsgpackError(f"a numpy array of shape {shape} and dtype {dtype} is {count * dtype.itemsize} bytes; its "
306
313
  f"data is {len(data)}")
307
- return _numpy().frombuffer(data, dtype=dtype, count=count).reshape(shape)
314
+ np = _numpy()
315
+ if np is None:
316
+ return _nested(_plain_items(dtype, data, count), shape)
317
+ return np.frombuffer(data, dtype=dtype, count=count).reshape(shape)
318
+
319
+
320
+
321
+ _MAX_DIMS = 64
308
322
 
309
323
 
310
324
  def _numpy():
325
+ """numpy, or None where it is not installed: its arrays are then read as plain values (_Plain)."""
311
326
  try:
312
327
  import numpy
313
328
  except ImportError:
314
- raise MsgpackError("this body holds numpy arrays, and numpy is not installed here") from None
329
+ return None
315
330
  return numpy
316
331
 
317
332
 
318
333
  def _dtype(descr):
319
- np = _numpy()
334
+ """`descr`, an array's type string, as numpy's dtype - or, where numpy is not installed, as a _Plain read here.
335
+ MsgpackError for one that holds objects, a structured one, and one that is not a type string."""
320
336
  if not isinstance(descr, (str, bytes)):
321
337
  raise MsgpackError("a numpy array's dtype is not a type string: a structured array is not carried, only "
322
338
  "plain numeric, bool and string dtypes are")
339
+ np = _numpy()
340
+ if np is None:
341
+ return _plain(_text(descr))
323
342
  try:
324
343
  dtype = np.dtype(_text(descr))
325
344
  except TypeError:
326
345
  raise MsgpackError(f"not a numpy dtype: {_text(descr)!r}") from None
327
346
  _readable_dtype(dtype)
328
347
  return dtype
348
+
349
+
350
+
351
+
352
+
353
+
354
+
355
+
356
+ class _Plain(NamedTuple):
357
+ """An array's type string ('<f4', '|u1', '<U5' - numpy's dtype.str) read without numpy: struct's byte order, the
358
+ kind (numpy's letter) and one item's size in bytes."""
359
+ text: str
360
+ order: str
361
+ kind: str
362
+ itemsize: int
363
+
364
+ def __str__(self) -> str:
365
+ return self.text
366
+
367
+
368
+
369
+
370
+ _STRUCT = {("b", 1): "?", ("i", 1): "b", ("i", 2): "h", ("i", 4): "i", ("i", 8): "q", ("u", 1): "B", ("u", 2): "H",
371
+ ("u", 4): "I", ("u", 8): "Q", ("f", 2): "e", ("f", 4): "f", ("f", 8): "d", ("c", 8): "f", ("c", 16): "d"}
372
+ _TYPE = re.compile(r"([<>|=]?)([A-Za-z])(.*)", re.DOTALL)
373
+
374
+
375
+ def _plain(text: str) -> _Plain:
376
+ """MsgpackError for a type string that holds objects or is structured - refused as with numpy - one whose items
377
+ are no bytes at all, and one only numpy reads (a long double, a date, a time span)."""
378
+ match = _TYPE.fullmatch(text)
379
+ order, kind, size = match.groups() if match else ("", "", "")
380
+ if kind in ("O", "V"):
381
+ raise MsgpackError(f"a numpy array of dtype {text} is not carried: only plain numeric, bool and string dtypes "
382
+ "are")
383
+ n = int(size) if size.isascii() and size.isdigit() else -1
384
+ if kind in ("S", "U") and n == 0:
385
+ raise MsgpackError(f"a numpy array of dtype {text}, whose items are 0 bytes")
386
+ itemsize = 4 * n if kind == "U" else n
387
+ if not ((kind in ("S", "U") and n > 0) or (kind, itemsize) in _STRUCT):
388
+ raise MsgpackError(f"this body holds a numpy array of dtype {text}, which only numpy reads, and numpy is not "
389
+ "installed here")
390
+ return _Plain(text, "<" if order in ("", "|") else order, kind, itemsize)
391
+
392
+
393
+ def _plain_items(t: _Plain, data: bytes, count: int) -> list:
394
+ """`count` items of type `t` from `data`, as tolist() gives them: ints, floats, complexes and bools; bytes and
395
+ strs with their trailing NULs cut, as numpy cuts them."""
396
+ size = t.itemsize
397
+ if t.kind == "S":
398
+ return [data[i:i + size].rstrip(b"\x00") for i in range(0, count * size, size)]
399
+ if t.kind == "U":
400
+ big = t.order == ">" or (t.order == "=" and sys.byteorder == "big")
401
+ try:
402
+ return [str(data[i:i + size], "utf-32-be" if big else "utf-32-le").rstrip("\x00")
403
+ for i in range(0, count * size, size)]
404
+ except UnicodeDecodeError:
405
+ raise MsgpackError(f"a numpy array of dtype {t} whose data is not UTF-32") from None
406
+ code = _STRUCT[(t.kind, size)]
407
+ if t.kind == "c":
408
+ parts = struct.unpack_from(f"{t.order}{2 * count}{code}", data)
409
+ return [complex(parts[i], parts[i + 1]) for i in range(0, 2 * count, 2)]
410
+ return list(struct.unpack_from(f"{t.order}{count}{code}", data))
411
+
412
+
413
+ def _nested(flat: list, shape: list) -> Any:
414
+ """`flat`, in C order, as the nested lists of `shape`, as tolist() nests them - a 0-d array's one value as itself."""
415
+ if not shape:
416
+ return flat[0]
417
+ if len(shape) == 1:
418
+ return flat
419
+ step = len(flat) // shape[0] if shape[0] else 0
420
+ return [_nested(flat[i * step:(i + 1) * step], shape[1:]) for i in range(shape[0])]
@@ -79,5 +79,5 @@
79
79
  ],
80
80
  "title": "ActRequest",
81
81
  "type": "object",
82
- "x-contract-version": "0.5.20"
82
+ "x-contract-version": "0.5.21"
83
83
  }
@@ -89,5 +89,5 @@
89
89
  ],
90
90
  "title": "ActResponse",
91
91
  "type": "object",
92
- "x-contract-version": "0.5.20"
92
+ "x-contract-version": "0.5.21"
93
93
  }
@@ -99,5 +99,5 @@
99
99
  ],
100
100
  "title": "ActionChunk",
101
101
  "type": "object",
102
- "x-contract-version": "0.5.20"
102
+ "x-contract-version": "0.5.21"
103
103
  }
@@ -84,5 +84,5 @@
84
84
  ],
85
85
  "title": "ActionContract",
86
86
  "type": "object",
87
- "x-contract-version": "0.5.20"
87
+ "x-contract-version": "0.5.21"
88
88
  }
@@ -19,5 +19,5 @@
19
19
  ],
20
20
  "title": "ActionStep",
21
21
  "type": "object",
22
- "x-contract-version": "0.5.20"
22
+ "x-contract-version": "0.5.21"
23
23
  }
@@ -17,5 +17,5 @@
17
17
  ],
18
18
  "title": "AdapterPair",
19
19
  "type": "object",
20
- "x-contract-version": "0.5.20"
20
+ "x-contract-version": "0.5.21"
21
21
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "AddLocal",
25
25
  "type": "object",
26
- "x-contract-version": "0.5.20"
26
+ "x-contract-version": "0.5.21"
27
27
  }
@@ -57,5 +57,5 @@
57
57
  },
58
58
  "title": "Autoscaler",
59
59
  "type": "object",
60
- "x-contract-version": "0.5.20"
60
+ "x-contract-version": "0.5.21"
61
61
  }
@@ -50,5 +50,5 @@
50
50
  ],
51
51
  "title": "BenchmarkConditionSpec",
52
52
  "type": "object",
53
- "x-contract-version": "0.5.20"
53
+ "x-contract-version": "0.5.21"
54
54
  }
@@ -974,5 +974,5 @@
974
974
  ],
975
975
  "title": "BenchmarkRegisterRequest",
976
976
  "type": "object",
977
- "x-contract-version": "0.5.20"
977
+ "x-contract-version": "0.5.21"
978
978
  }
@@ -379,7 +379,7 @@
379
379
  ],
380
380
  "title": "SeqFlags",
381
381
  "type": "integer",
382
- "x-contract-version": "0.5.20",
382
+ "x-contract-version": "0.5.21",
383
383
  "x-flag-names": {
384
384
  "CHECK": 65536,
385
385
  "INFER": 16,
@@ -628,5 +628,5 @@
628
628
  ],
629
629
  "title": "BenchmarkSpec",
630
630
  "type": "object",
631
- "x-contract-version": "0.5.20"
631
+ "x-contract-version": "0.5.21"
632
632
  }
@@ -40,5 +40,5 @@
40
40
  ],
41
41
  "title": "BenchmarkStatusResponse",
42
42
  "type": "object",
43
- "x-contract-version": "0.5.20"
43
+ "x-contract-version": "0.5.21"
44
44
  }
@@ -79,5 +79,5 @@
79
79
  ],
80
80
  "title": "BootstrapResponse",
81
81
  "type": "object",
82
- "x-contract-version": "0.5.20"
82
+ "x-contract-version": "0.5.21"
83
83
  }
@@ -72,5 +72,5 @@
72
72
  ],
73
73
  "title": "Camera",
74
74
  "type": "object",
75
- "x-contract-version": "0.5.20"
75
+ "x-contract-version": "0.5.21"
76
76
  }
@@ -23,5 +23,5 @@
23
23
  ],
24
24
  "title": "CodeBundle",
25
25
  "type": "object",
26
- "x-contract-version": "0.5.20"
26
+ "x-contract-version": "0.5.21"
27
27
  }
@@ -96,5 +96,5 @@
96
96
  },
97
97
  "title": "Concurrency",
98
98
  "type": "object",
99
- "x-contract-version": "0.5.20"
99
+ "x-contract-version": "0.5.21"
100
100
  }
@@ -55,5 +55,5 @@
55
55
  ],
56
56
  "title": "Conditions",
57
57
  "type": "object",
58
- "x-contract-version": "0.5.20"
58
+ "x-contract-version": "0.5.21"
59
59
  }
@@ -25,5 +25,5 @@
25
25
  ],
26
26
  "title": "ConnectRequest",
27
27
  "type": "object",
28
- "x-contract-version": "0.5.20"
28
+ "x-contract-version": "0.5.21"
29
29
  }
@@ -310,5 +310,5 @@
310
310
  ],
311
311
  "title": "ConnectResponse",
312
312
  "type": "object",
313
- "x-contract-version": "0.5.20"
313
+ "x-contract-version": "0.5.21"
314
314
  }
@@ -18,5 +18,5 @@
18
18
  ],
19
19
  "title": "DeploymentAccepted",
20
20
  "type": "object",
21
- "x-contract-version": "0.5.20"
21
+ "x-contract-version": "0.5.21"
22
22
  }
@@ -452,6 +452,38 @@
452
452
  ],
453
453
  "default": null
454
454
  },
455
+ "own_actions": {
456
+ "anyOf": [
457
+ {
458
+ "enum": [
459
+ "one",
460
+ "steps"
461
+ ],
462
+ "type": "string"
463
+ },
464
+ {
465
+ "type": "null"
466
+ }
467
+ ],
468
+ "default": null,
469
+ "title": "Own Actions"
470
+ },
471
+ "own_observations": {
472
+ "anyOf": [
473
+ {
474
+ "enum": [
475
+ "latest",
476
+ "since_last_act"
477
+ ],
478
+ "type": "string"
479
+ },
480
+ {
481
+ "type": "null"
482
+ }
483
+ ],
484
+ "default": null,
485
+ "title": "Own Observations"
486
+ },
455
487
  "params": {
456
488
  "anyOf": [
457
489
  {
@@ -499,5 +531,5 @@
499
531
  ],
500
532
  "title": "DeploymentPolicy",
501
533
  "type": "object",
502
- "x-contract-version": "0.5.20"
534
+ "x-contract-version": "0.5.21"
503
535
  }
@@ -470,6 +470,38 @@
470
470
  ],
471
471
  "default": null
472
472
  },
473
+ "own_actions": {
474
+ "anyOf": [
475
+ {
476
+ "enum": [
477
+ "one",
478
+ "steps"
479
+ ],
480
+ "type": "string"
481
+ },
482
+ {
483
+ "type": "null"
484
+ }
485
+ ],
486
+ "default": null,
487
+ "title": "Own Actions"
488
+ },
489
+ "own_observations": {
490
+ "anyOf": [
491
+ {
492
+ "enum": [
493
+ "latest",
494
+ "since_last_act"
495
+ ],
496
+ "type": "string"
497
+ },
498
+ {
499
+ "type": "null"
500
+ }
501
+ ],
502
+ "default": null,
503
+ "title": "Own Observations"
504
+ },
473
505
  "params": {
474
506
  "anyOf": [
475
507
  {
@@ -1163,5 +1195,5 @@
1163
1195
  ],
1164
1196
  "title": "DeploymentRequest",
1165
1197
  "type": "object",
1166
- "x-contract-version": "0.5.20"
1198
+ "x-contract-version": "0.5.21"
1167
1199
  }
@@ -58,5 +58,5 @@
58
58
  ],
59
59
  "title": "DeploymentStatusResponse",
60
60
  "type": "object",
61
- "x-contract-version": "0.5.20"
61
+ "x-contract-version": "0.5.21"
62
62
  }
@@ -235,5 +235,5 @@
235
235
  ],
236
236
  "title": "Embodiment",
237
237
  "type": "object",
238
- "x-contract-version": "0.5.20"
238
+ "x-contract-version": "0.5.21"
239
239
  }
@@ -94,5 +94,5 @@
94
94
  ],
95
95
  "title": "ErrorBody",
96
96
  "type": "object",
97
- "x-contract-version": "0.5.20"
97
+ "x-contract-version": "0.5.21"
98
98
  }
@@ -22,7 +22,7 @@
22
22
  ],
23
23
  "title": "ErrorCode",
24
24
  "type": "string",
25
- "x-contract-version": "0.5.20",
25
+ "x-contract-version": "0.5.21",
26
26
  "x-errors": {
27
27
  "budget_exhausted": {
28
28
  "exit_code": 6,
@@ -60,5 +60,5 @@
60
60
  ],
61
61
  "title": "Estimate",
62
62
  "type": "object",
63
- "x-contract-version": "0.5.20"
63
+ "x-contract-version": "0.5.21"
64
64
  }
@@ -240,5 +240,5 @@
240
240
  ],
241
241
  "title": "EvalDryRunResponse",
242
242
  "type": "object",
243
- "x-contract-version": "0.5.20"
243
+ "x-contract-version": "0.5.21"
244
244
  }
@@ -432,5 +432,5 @@
432
432
  ],
433
433
  "title": "EvalReport",
434
434
  "type": "object",
435
- "x-contract-version": "0.5.20"
435
+ "x-contract-version": "0.5.21"
436
436
  }
@@ -318,5 +318,5 @@
318
318
  },
319
319
  "title": "EvalRequest",
320
320
  "type": "object",
321
- "x-contract-version": "0.5.20"
321
+ "x-contract-version": "0.5.21"
322
322
  }
@@ -153,5 +153,5 @@
153
153
  ],
154
154
  "title": "EvalResponse",
155
155
  "type": "object",
156
- "x-contract-version": "0.5.20"
156
+ "x-contract-version": "0.5.21"
157
157
  }
@@ -49,5 +49,5 @@
49
49
  ],
50
50
  "title": "ImageFrame",
51
51
  "type": "object",
52
- "x-contract-version": "0.5.20"
52
+ "x-contract-version": "0.5.21"
53
53
  }
@@ -257,5 +257,5 @@
257
257
  },
258
258
  "title": "ImageSpec",
259
259
  "type": "object",
260
- "x-contract-version": "0.5.20"
260
+ "x-contract-version": "0.5.21"
261
261
  }
@@ -38,5 +38,5 @@
38
38
  ],
39
39
  "title": "ImageStepAddLocal",
40
40
  "type": "object",
41
- "x-contract-version": "0.5.20"
41
+ "x-contract-version": "0.5.21"
42
42
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepApt",
16
16
  "type": "object",
17
- "x-contract-version": "0.5.20"
17
+ "x-contract-version": "0.5.21"
18
18
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepEnv",
16
16
  "type": "object",
17
- "x-contract-version": "0.5.20"
17
+ "x-contract-version": "0.5.21"
18
18
  }
@@ -46,5 +46,5 @@
46
46
  ],
47
47
  "title": "ImageStepRun",
48
48
  "type": "object",
49
- "x-contract-version": "0.5.20"
49
+ "x-contract-version": "0.5.21"
50
50
  }
@@ -37,5 +37,5 @@
37
37
  ],
38
38
  "title": "ImageStepTemplateFiles",
39
39
  "type": "object",
40
- "x-contract-version": "0.5.20"
40
+ "x-contract-version": "0.5.21"
41
41
  }
@@ -14,5 +14,5 @@
14
14
  ],
15
15
  "title": "ImageStepUvPip",
16
16
  "type": "object",
17
- "x-contract-version": "0.5.20"
17
+ "x-contract-version": "0.5.21"
18
18
  }
@@ -99,5 +99,5 @@
99
99
  ],
100
100
  "title": "InferParam",
101
101
  "type": "object",
102
- "x-contract-version": "0.5.20"
102
+ "x-contract-version": "0.5.21"
103
103
  }
@@ -24,5 +24,5 @@
24
24
  ],
25
25
  "title": "Lease",
26
26
  "type": "object",
27
- "x-contract-version": "0.5.20"
27
+ "x-contract-version": "0.5.21"
28
28
  }
@@ -51,5 +51,5 @@
51
51
  ],
52
52
  "title": "MetricAgg",
53
53
  "type": "object",
54
- "x-contract-version": "0.5.20"
54
+ "x-contract-version": "0.5.21"
55
55
  }
@@ -169,5 +169,5 @@
169
169
  ],
170
170
  "title": "Observation",
171
171
  "type": "object",
172
- "x-contract-version": "0.5.20"
172
+ "x-contract-version": "0.5.21"
173
173
  }
@@ -120,5 +120,5 @@
120
120
  },
121
121
  "title": "ObservationContract",
122
122
  "type": "object",
123
- "x-contract-version": "0.5.20"
123
+ "x-contract-version": "0.5.21"
124
124
  }
@@ -822,7 +822,7 @@
822
822
  ],
823
823
  "title": "SeqFlags",
824
824
  "type": "integer",
825
- "x-contract-version": "0.5.20",
825
+ "x-contract-version": "0.5.21",
826
826
  "x-flag-names": {
827
827
  "CHECK": 65536,
828
828
  "INFER": 16,
@@ -922,5 +922,5 @@
922
922
  ],
923
923
  "title": "PolicyRegistration",
924
924
  "type": "object",
925
- "x-contract-version": "0.5.20"
925
+ "x-contract-version": "0.5.21"
926
926
  }
@@ -827,5 +827,5 @@
827
827
  ],
828
828
  "title": "PolicySpec",
829
829
  "type": "object",
830
- "x-contract-version": "0.5.20"
830
+ "x-contract-version": "0.5.21"
831
831
  }
@@ -68,5 +68,5 @@
68
68
  },
69
69
  "title": "Proprioception",
70
70
  "type": "object",
71
- "x-contract-version": "0.5.20"
71
+ "x-contract-version": "0.5.21"
72
72
  }
@@ -36,5 +36,5 @@
36
36
  ],
37
37
  "title": "RenderSpec",
38
38
  "type": "object",
39
- "x-contract-version": "0.5.20"
39
+ "x-contract-version": "0.5.21"
40
40
  }
@@ -52,5 +52,5 @@
52
52
  },
53
53
  "title": "ReplaySpec",
54
54
  "type": "object",
55
- "x-contract-version": "0.5.20"
55
+ "x-contract-version": "0.5.21"
56
56
  }
@@ -86,5 +86,5 @@
86
86
  ],
87
87
  "title": "Resources",
88
88
  "type": "object",
89
- "x-contract-version": "0.5.20"
89
+ "x-contract-version": "0.5.21"
90
90
  }
@@ -55,5 +55,5 @@
55
55
  ],
56
56
  "title": "RolloutResult",
57
57
  "type": "object",
58
- "x-contract-version": "0.5.20"
58
+ "x-contract-version": "0.5.21"
59
59
  }
@@ -21,5 +21,5 @@
21
21
  ],
22
22
  "title": "SecretCreateRequest",
23
23
  "type": "object",
24
- "x-contract-version": "0.5.20"
24
+ "x-contract-version": "0.5.21"
25
25
  }
@@ -40,5 +40,5 @@
40
40
  ],
41
41
  "title": "SecretInfo",
42
42
  "type": "object",
43
- "x-contract-version": "0.5.20"
43
+ "x-contract-version": "0.5.21"
44
44
  }
@@ -12,5 +12,5 @@
12
12
  ],
13
13
  "title": "SecretRef",
14
14
  "type": "object",
15
- "x-contract-version": "0.5.20"
15
+ "x-contract-version": "0.5.21"
16
16
  }
@@ -17,7 +17,7 @@
17
17
  ],
18
18
  "title": "SeqFlags",
19
19
  "type": "integer",
20
- "x-contract-version": "0.5.20",
20
+ "x-contract-version": "0.5.21",
21
21
  "x-flag-names": {
22
22
  "CHECK": 65536,
23
23
  "INFER": 16,
@@ -82,5 +82,5 @@
82
82
  ],
83
83
  "title": "Step",
84
84
  "type": "object",
85
- "x-contract-version": "0.5.20"
85
+ "x-contract-version": "0.5.21"
86
86
  }
@@ -22,5 +22,5 @@
22
22
  ],
23
23
  "title": "TaskAgg",
24
24
  "type": "object",
25
- "x-contract-version": "0.5.20"
25
+ "x-contract-version": "0.5.21"
26
26
  }
@@ -22,5 +22,5 @@
22
22
  ],
23
23
  "title": "TemplateFiles",
24
24
  "type": "object",
25
- "x-contract-version": "0.5.20"
25
+ "x-contract-version": "0.5.21"
26
26
  }
@@ -20,5 +20,5 @@
20
20
  ],
21
21
  "title": "Timeouts",
22
22
  "type": "object",
23
- "x-contract-version": "0.5.20"
23
+ "x-contract-version": "0.5.21"
24
24
  }
@@ -24,5 +24,5 @@
24
24
  ],
25
25
  "title": "UploadTarget",
26
26
  "type": "object",
27
- "x-contract-version": "0.5.20"
27
+ "x-contract-version": "0.5.21"
28
28
  }
@@ -20,5 +20,5 @@
20
20
  ],
21
21
  "title": "Variant",
22
22
  "type": "object",
23
- "x-contract-version": "0.5.20"
23
+ "x-contract-version": "0.5.21"
24
24
  }
@@ -25,5 +25,5 @@
25
25
  ],
26
26
  "title": "VolumeFile",
27
27
  "type": "object",
28
- "x-contract-version": "0.5.20"
28
+ "x-contract-version": "0.5.21"
29
29
  }
@@ -68,5 +68,5 @@
68
68
  ],
69
69
  "title": "VolumeInfo",
70
70
  "type": "object",
71
- "x-contract-version": "0.5.20"
71
+ "x-contract-version": "0.5.21"
72
72
  }
@@ -17,5 +17,5 @@
17
17
  ],
18
18
  "title": "VolumeMount",
19
19
  "type": "object",
20
- "x-contract-version": "0.5.20"
20
+ "x-contract-version": "0.5.21"
21
21
  }
@@ -24,5 +24,5 @@
24
24
  ],
25
25
  "title": "VolumeRef",
26
26
  "type": "object",
27
- "x-contract-version": "0.5.20"
27
+ "x-contract-version": "0.5.21"
28
28
  }
@@ -56,5 +56,5 @@
56
56
  ],
57
57
  "title": "VolumeUploadRequest",
58
58
  "type": "object",
59
- "x-contract-version": "0.5.20"
59
+ "x-contract-version": "0.5.21"
60
60
  }
@@ -65,5 +65,5 @@
65
65
  ],
66
66
  "title": "VolumeUploadResponse",
67
67
  "type": "object",
68
- "x-contract-version": "0.5.20"
68
+ "x-contract-version": "0.5.21"
69
69
  }
@@ -86,5 +86,5 @@
86
86
  ],
87
87
  "title": "WarmingError",
88
88
  "type": "object",
89
- "x-contract-version": "0.5.20"
89
+ "x-contract-version": "0.5.21"
90
90
  }
File without changes