Skip to content

Commit 956bf30

Browse files
committed
ENH: add dtype_str and dtype_descr to descriptor schema
1 parent c912871 commit 956bf30

File tree

2 files changed

+64
-22
lines changed

2 files changed

+64
-22
lines changed

event_model/schemas/event_descriptor.json

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
{
22
"definitions": {
3+
"np_dtype": {
4+
"title": "nd_dtype",
5+
"type": ["array", "string"],
6+
"pattern": "[|<>][tbiufcmMOSUV][0-9]+",
7+
"items": {
8+
"type": "array",
9+
"items": [{"type": "string"}, {"$ref": "#/definitions/np_dtype"}],
10+
"additionalItems": {"type": "array", "items": {"type":"integer"}}
11+
}
12+
},
313
"data_key": {
414
"title": "data_key",
515
"description": "Describes the objects in the data property of Event documents",
@@ -15,6 +25,20 @@
1525
"type": "string",
1626
"description": "The type of the data in the event."
1727
},
28+
"dtype_str" : {
29+
"type": "string",
30+
"description": "The __array_protocol__ typestring of the 'inner' data",
31+
"pattern": "[|<>][tbiufcmMOSUV][0-9]+"
32+
},
33+
"dtype_descr" : {
34+
"type": "array",
35+
"description": "The __array_protocol__ description of the 'inner' data. This maybe nested.",
36+
"items": {
37+
"type": "array",
38+
"items": [{"type": "string"}, {"$ref": "#/definitions/np_dtype"}],
39+
"additionalItems": {"type": "array", "items": {"type":"integer"}}
40+
}
41+
},
1842
"external": {
1943
"pattern": "^[A-Z]+:?",
2044
"type": "string",

event_model/tests/test_em.py

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
from distutils.version import LooseVersion
22
import json
33
import pickle
4+
import numpy as np
5+
46

57
import event_model
68
import jsonschema
79
import numpy
810
import pytest
9-
11+
from event_model._numpy import infer_datakeys
1012

1113
JSONSCHEMA_2 = LooseVersion(jsonschema.__version__) < LooseVersion("3.0.0")
1214

@@ -46,39 +48,55 @@ def test_compose_run():
4648
assert bundle.compose_descriptor is compose_descriptor
4749
assert bundle.compose_resource is compose_resource
4850
assert bundle.compose_stop is compose_stop
51+
motor_data = 5.0
52+
counter_data = 10
53+
image_data = np.zeros((512, 512))
4954
bundle = compose_descriptor(
50-
data_keys={'motor': {'shape': [], 'dtype': 'number', 'source': '...'},
51-
'image': {'shape': [512, 512], 'dtype': 'array',
52-
'source': '...', 'external': 'FILESTORE:'}},
53-
name='primary')
55+
data_keys={
56+
"motor": {"source": "...", **infer_datakeys(motor_data)},
57+
"counter": {"source": "...", **infer_datakeys(counter_data)},
58+
"image": {
59+
**infer_datakeys(image_data),
60+
"source": "...",
61+
"external": "FILESTORE:",
62+
},
63+
},
64+
name="primary",
65+
)
5466
descriptor_doc, compose_event, compose_event_page = bundle
5567
assert bundle.descriptor_doc is descriptor_doc
5668
assert bundle.compose_event is compose_event
5769
assert bundle.compose_event_page is compose_event_page
5870
bundle = compose_resource(
59-
spec='TIFF', root='/tmp', resource_path='stack.tiff',
60-
resource_kwargs={})
71+
spec="TIFF", root="/tmp", resource_path="stack.tiff", resource_kwargs={}
72+
)
6173
resource_doc, compose_datum, compose_datum_page = bundle
6274
assert bundle.resource_doc is resource_doc
6375
assert bundle.compose_datum is compose_datum
6476
assert bundle.compose_datum_page is compose_datum_page
65-
datum_doc = compose_datum(datum_kwargs={'slice': 5})
77+
datum_doc = compose_datum(datum_kwargs={"slice": 5})
6678
event_doc = compose_event(
67-
data={'motor': 0, 'image': datum_doc['datum_id']},
68-
timestamps={'motor': 0, 'image': 0}, filled={'image': False})
69-
datum_page = compose_datum_page(datum_kwargs={'slice': [10, 15]})
70-
event_page = compose_event_page(data={'motor': [1, 2], 'image':
71-
datum_page['datum_id']},
72-
timestamps={'motor': [0, 0],
73-
'image': [0, 0]},
74-
filled={'image': [False, False]},
75-
seq_num=[1, 2])
76-
assert 'descriptor' in event_doc
77-
assert 'descriptor' in event_page
78-
assert event_doc['seq_num'] == 1
79+
data={"motor": 0.0, "counter": 1, "image": datum_doc["datum_id"]},
80+
timestamps={"motor": 0, "counter": 0, "image": 0},
81+
filled={"image": False},
82+
)
83+
datum_page = compose_datum_page(datum_kwargs={"slice": [10, 15]})
84+
event_page = compose_event_page(
85+
data={
86+
"motor": [1.0, 2.0],
87+
"image": datum_page["datum_id"],
88+
"counter": [10, 11],
89+
},
90+
timestamps={"motor": [0, 0], "image": [0, 0], "counter": [0, 0]},
91+
filled={"image": [False, False]},
92+
seq_num=[1, 2],
93+
)
94+
assert "descriptor" in event_doc
95+
assert "descriptor" in event_page
96+
assert event_doc["seq_num"] == 1
7997
stop_doc = compose_stop()
80-
assert 'primary' in stop_doc['num_events']
81-
assert stop_doc['num_events']['primary'] == 3
98+
assert "primary" in stop_doc["num_events"]
99+
assert stop_doc["num_events"]["primary"] == 3
82100

83101

84102
def test_round_trip_pagination():

0 commit comments

Comments
 (0)