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.
- {sequence_base-0.4.23 → sequence_base-0.4.24}/PKG-INFO +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/pyproject.toml +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/constants/version.py +2 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/deployments.py +13 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/msgpack_io.py +102 -10
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ActRequest.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ActResponse.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ActionChunk.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ActionContract.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ActionStep.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/AdapterPair.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/AddLocal.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Autoscaler.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/BenchmarkConditionSpec.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/BenchmarkRegisterRequest.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/BenchmarkSpec.json +2 -2
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/BenchmarkStatusResponse.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/BootstrapResponse.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Camera.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/CodeBundle.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Concurrency.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Conditions.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ConnectRequest.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ConnectResponse.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/DeploymentAccepted.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/DeploymentPolicy.json +33 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/DeploymentRequest.json +33 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/DeploymentStatusResponse.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Embodiment.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ErrorBody.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ErrorCodes.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Estimate.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/EvalDryRunResponse.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/EvalReport.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/EvalRequest.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/EvalResponse.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ImageFrame.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ImageSpec.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ImageStepAddLocal.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ImageStepApt.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ImageStepEnv.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ImageStepRun.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ImageStepTemplateFiles.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ImageStepUvPip.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/InferParam.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Lease.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/MetricAgg.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Observation.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ObservationContract.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/PolicyRegistration.json +2 -2
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/PolicySpec.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Proprioception.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/RenderSpec.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/ReplaySpec.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Resources.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/RolloutResult.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/SecretCreateRequest.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/SecretInfo.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/SecretRef.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/SeqFlags.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Step.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/TaskAgg.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/TemplateFiles.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Timeouts.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/UploadTarget.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/Variant.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/VolumeFile.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/VolumeInfo.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/VolumeMount.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/VolumeRef.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/VolumeUploadRequest.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/VolumeUploadResponse.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schemas/WarmingError.json +1 -1
- {sequence_base-0.4.23 → sequence_base-0.4.24}/.gitignore +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/README.md +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/__init__.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/auth.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/codec/__init__.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/codec/image.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/constants/__init__.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/constants/cards.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/constants/headers.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/constants/limits.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/__init__.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/accounts.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/act.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/adapters.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/benchmarks.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/connect.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/errors.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/eval.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/flags.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/io.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/policy.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/templates.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/volumes.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/contract/wire.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/errors/__init__.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/errors/transport.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/obs/__init__.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/obs/log.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/obs/rid.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/presets/__init__.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/presets/frames.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/presets/robot_arm.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/schema_export.py +0 -0
- {sequence_base-0.4.23 → sequence_base-0.4.24}/sequence_base/telemetry/__init__.py +0 -0
- {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.
|
|
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.
|
|
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"]
|
|
@@ -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
|
-
|
|
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
|
-
|
|
159
|
-
an
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
329
|
+
return None
|
|
315
330
|
return numpy
|
|
316
331
|
|
|
317
332
|
|
|
318
333
|
def _dtype(descr):
|
|
319
|
-
|
|
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])]
|
|
@@ -379,7 +379,7 @@
|
|
|
379
379
|
],
|
|
380
380
|
"title": "SeqFlags",
|
|
381
381
|
"type": "integer",
|
|
382
|
-
"x-contract-version": "0.5.
|
|
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.
|
|
631
|
+
"x-contract-version": "0.5.21"
|
|
632
632
|
}
|
|
@@ -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.
|
|
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.
|
|
1198
|
+
"x-contract-version": "0.5.21"
|
|
1167
1199
|
}
|
|
@@ -822,7 +822,7 @@
|
|
|
822
822
|
],
|
|
823
823
|
"title": "SeqFlags",
|
|
824
824
|
"type": "integer",
|
|
825
|
-
"x-contract-version": "0.5.
|
|
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.
|
|
925
|
+
"x-contract-version": "0.5.21"
|
|
926
926
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|