mrd-python 2.0.0__py3-none-any.whl

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.
mrd/binary.py ADDED
@@ -0,0 +1,680 @@
1
+ # This file was generated by the "yardl" tool. DO NOT EDIT.
2
+
3
+ # pyright: reportUnusedClass=false
4
+ # pyright: reportUnusedImport=false
5
+ # pyright: reportUnknownArgumentType=false
6
+ # pyright: reportUnknownMemberType=false
7
+ # pyright: reportUnknownVariableType=false
8
+
9
+ import collections.abc
10
+ import io
11
+ import typing
12
+
13
+ import numpy as np
14
+ import numpy.typing as npt
15
+
16
+ from .types import *
17
+
18
+ from .protocols import *
19
+ from . import _binary
20
+ from . import yardl_types as yardl
21
+
22
+ class BinaryMrdWriter(_binary.BinaryProtocolWriter, MrdWriterBase):
23
+ """Binary writer for the Mrd protocol."""
24
+
25
+
26
+ def __init__(self, stream: typing.Union[typing.BinaryIO, str]) -> None:
27
+ MrdWriterBase.__init__(self)
28
+ _binary.BinaryProtocolWriter.__init__(self, stream, MrdWriterBase.schema)
29
+
30
+ def _write_header(self, value: typing.Optional[Header]) -> None:
31
+ _binary.OptionalSerializer(HeaderSerializer()).write(self._stream, value)
32
+
33
+ def _write_data(self, value: collections.abc.Iterable[StreamItem]) -> None:
34
+ _binary.StreamSerializer(_binary.UnionSerializer(StreamItem, [(StreamItem.Acquisition, AcquisitionSerializer()), (StreamItem.WaveformUint32, WaveformSerializer(_binary.uint32_serializer)), (StreamItem.ImageUint16, ImageSerializer(_binary.uint16_serializer)), (StreamItem.ImageInt16, ImageSerializer(_binary.int16_serializer)), (StreamItem.ImageUint, ImageSerializer(_binary.uint32_serializer)), (StreamItem.ImageInt, ImageSerializer(_binary.int32_serializer)), (StreamItem.ImageFloat, ImageSerializer(_binary.float32_serializer)), (StreamItem.ImageDouble, ImageSerializer(_binary.float64_serializer)), (StreamItem.ImageComplexFloat, ImageSerializer(_binary.complexfloat32_serializer)), (StreamItem.ImageComplexDouble, ImageSerializer(_binary.complexfloat64_serializer))])).write(self._stream, value)
35
+
36
+
37
+ class BinaryMrdReader(_binary.BinaryProtocolReader, MrdReaderBase):
38
+ """Binary writer for the Mrd protocol."""
39
+
40
+
41
+ def __init__(self, stream: typing.Union[io.BufferedReader, io.BytesIO, typing.BinaryIO, str]) -> None:
42
+ MrdReaderBase.__init__(self)
43
+ _binary.BinaryProtocolReader.__init__(self, stream, MrdReaderBase.schema)
44
+
45
+ def _read_header(self) -> typing.Optional[Header]:
46
+ return _binary.OptionalSerializer(HeaderSerializer()).read(self._stream)
47
+
48
+ def _read_data(self) -> collections.abc.Iterable[StreamItem]:
49
+ return _binary.StreamSerializer(_binary.UnionSerializer(StreamItem, [(StreamItem.Acquisition, AcquisitionSerializer()), (StreamItem.WaveformUint32, WaveformSerializer(_binary.uint32_serializer)), (StreamItem.ImageUint16, ImageSerializer(_binary.uint16_serializer)), (StreamItem.ImageInt16, ImageSerializer(_binary.int16_serializer)), (StreamItem.ImageUint, ImageSerializer(_binary.uint32_serializer)), (StreamItem.ImageInt, ImageSerializer(_binary.int32_serializer)), (StreamItem.ImageFloat, ImageSerializer(_binary.float32_serializer)), (StreamItem.ImageDouble, ImageSerializer(_binary.float64_serializer)), (StreamItem.ImageComplexFloat, ImageSerializer(_binary.complexfloat32_serializer)), (StreamItem.ImageComplexDouble, ImageSerializer(_binary.complexfloat64_serializer))])).read(self._stream)
50
+
51
+ class EncodingCountersSerializer(_binary.RecordSerializer[EncodingCounters]):
52
+ def __init__(self) -> None:
53
+ super().__init__([("kspace_encode_step_1", _binary.OptionalSerializer(_binary.uint32_serializer)), ("kspace_encode_step_2", _binary.OptionalSerializer(_binary.uint32_serializer)), ("average", _binary.OptionalSerializer(_binary.uint32_serializer)), ("slice", _binary.OptionalSerializer(_binary.uint32_serializer)), ("contrast", _binary.OptionalSerializer(_binary.uint32_serializer)), ("phase", _binary.OptionalSerializer(_binary.uint32_serializer)), ("repetition", _binary.OptionalSerializer(_binary.uint32_serializer)), ("set", _binary.OptionalSerializer(_binary.uint32_serializer)), ("segment", _binary.OptionalSerializer(_binary.uint32_serializer)), ("user", _binary.VectorSerializer(_binary.uint32_serializer))])
54
+
55
+ def write(self, stream: _binary.CodedOutputStream, value: EncodingCounters) -> None:
56
+ if isinstance(value, np.void):
57
+ self.write_numpy(stream, value)
58
+ return
59
+ self._write(stream, value.kspace_encode_step_1, value.kspace_encode_step_2, value.average, value.slice, value.contrast, value.phase, value.repetition, value.set, value.segment, value.user)
60
+
61
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
62
+ self._write(stream, value['kspace_encode_step_1'], value['kspace_encode_step_2'], value['average'], value['slice'], value['contrast'], value['phase'], value['repetition'], value['set'], value['segment'], value['user'])
63
+
64
+ def read(self, stream: _binary.CodedInputStream) -> EncodingCounters:
65
+ field_values = self._read(stream)
66
+ return EncodingCounters(kspace_encode_step_1=field_values[0], kspace_encode_step_2=field_values[1], average=field_values[2], slice=field_values[3], contrast=field_values[4], phase=field_values[5], repetition=field_values[6], set=field_values[7], segment=field_values[8], user=field_values[9])
67
+
68
+
69
+ class AcquisitionSerializer(_binary.RecordSerializer[Acquisition]):
70
+ def __init__(self) -> None:
71
+ super().__init__([("flags", _binary.EnumSerializer(_binary.uint64_serializer, AcquisitionFlags)), ("idx", EncodingCountersSerializer()), ("measurement_uid", _binary.uint32_serializer), ("scan_counter", _binary.OptionalSerializer(_binary.uint32_serializer)), ("acquisition_time_stamp", _binary.OptionalSerializer(_binary.uint32_serializer)), ("physiology_time_stamp", _binary.VectorSerializer(_binary.uint32_serializer)), ("channel_order", _binary.VectorSerializer(_binary.uint32_serializer)), ("discard_pre", _binary.OptionalSerializer(_binary.uint32_serializer)), ("discard_post", _binary.OptionalSerializer(_binary.uint32_serializer)), ("center_sample", _binary.OptionalSerializer(_binary.uint32_serializer)), ("encoding_space_ref", _binary.OptionalSerializer(_binary.uint32_serializer)), ("sample_time_us", _binary.OptionalSerializer(_binary.float32_serializer)), ("position", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("read_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("phase_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("slice_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("patient_table_position", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("user_int", _binary.VectorSerializer(_binary.int32_serializer)), ("user_float", _binary.VectorSerializer(_binary.float32_serializer)), ("data", _binary.NDArraySerializer(_binary.complexfloat32_serializer, 2)), ("trajectory", _binary.NDArraySerializer(_binary.float32_serializer, 2))])
72
+
73
+ def write(self, stream: _binary.CodedOutputStream, value: Acquisition) -> None:
74
+ if isinstance(value, np.void):
75
+ self.write_numpy(stream, value)
76
+ return
77
+ self._write(stream, value.flags, value.idx, value.measurement_uid, value.scan_counter, value.acquisition_time_stamp, value.physiology_time_stamp, value.channel_order, value.discard_pre, value.discard_post, value.center_sample, value.encoding_space_ref, value.sample_time_us, value.position, value.read_dir, value.phase_dir, value.slice_dir, value.patient_table_position, value.user_int, value.user_float, value.data, value.trajectory)
78
+
79
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
80
+ self._write(stream, value['flags'], value['idx'], value['measurement_uid'], value['scan_counter'], value['acquisition_time_stamp'], value['physiology_time_stamp'], value['channel_order'], value['discard_pre'], value['discard_post'], value['center_sample'], value['encoding_space_ref'], value['sample_time_us'], value['position'], value['read_dir'], value['phase_dir'], value['slice_dir'], value['patient_table_position'], value['user_int'], value['user_float'], value['data'], value['trajectory'])
81
+
82
+ def read(self, stream: _binary.CodedInputStream) -> Acquisition:
83
+ field_values = self._read(stream)
84
+ return Acquisition(flags=field_values[0], idx=field_values[1], measurement_uid=field_values[2], scan_counter=field_values[3], acquisition_time_stamp=field_values[4], physiology_time_stamp=field_values[5], channel_order=field_values[6], discard_pre=field_values[7], discard_post=field_values[8], center_sample=field_values[9], encoding_space_ref=field_values[10], sample_time_us=field_values[11], position=field_values[12], read_dir=field_values[13], phase_dir=field_values[14], slice_dir=field_values[15], patient_table_position=field_values[16], user_int=field_values[17], user_float=field_values[18], data=field_values[19], trajectory=field_values[20])
85
+
86
+
87
+ class SubjectInformationTypeSerializer(_binary.RecordSerializer[SubjectInformationType]):
88
+ def __init__(self) -> None:
89
+ super().__init__([("patient_name", _binary.OptionalSerializer(_binary.string_serializer)), ("patient_weight_kg", _binary.OptionalSerializer(_binary.float32_serializer)), ("patient_height_m", _binary.OptionalSerializer(_binary.float32_serializer)), ("patient_id", _binary.OptionalSerializer(_binary.string_serializer)), ("patient_birthdate", _binary.OptionalSerializer(_binary.date_serializer)), ("patient_gender", _binary.OptionalSerializer(_binary.EnumSerializer(_binary.int32_serializer, PatientGender)))])
90
+
91
+ def write(self, stream: _binary.CodedOutputStream, value: SubjectInformationType) -> None:
92
+ if isinstance(value, np.void):
93
+ self.write_numpy(stream, value)
94
+ return
95
+ self._write(stream, value.patient_name, value.patient_weight_kg, value.patient_height_m, value.patient_id, value.patient_birthdate, value.patient_gender)
96
+
97
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
98
+ self._write(stream, value['patient_name'], value['patient_weight_kg'], value['patient_height_m'], value['patient_id'], value['patient_birthdate'], value['patient_gender'])
99
+
100
+ def read(self, stream: _binary.CodedInputStream) -> SubjectInformationType:
101
+ field_values = self._read(stream)
102
+ return SubjectInformationType(patient_name=field_values[0], patient_weight_kg=field_values[1], patient_height_m=field_values[2], patient_id=field_values[3], patient_birthdate=field_values[4], patient_gender=field_values[5])
103
+
104
+
105
+ class StudyInformationTypeSerializer(_binary.RecordSerializer[StudyInformationType]):
106
+ def __init__(self) -> None:
107
+ super().__init__([("study_date", _binary.OptionalSerializer(_binary.date_serializer)), ("study_time", _binary.OptionalSerializer(_binary.time_serializer)), ("study_id", _binary.OptionalSerializer(_binary.string_serializer)), ("accession_number", _binary.OptionalSerializer(_binary.int64_serializer)), ("referring_physician_name", _binary.OptionalSerializer(_binary.string_serializer)), ("study_description", _binary.OptionalSerializer(_binary.string_serializer)), ("study_instance_uid", _binary.OptionalSerializer(_binary.string_serializer)), ("body_part_examined", _binary.OptionalSerializer(_binary.string_serializer))])
108
+
109
+ def write(self, stream: _binary.CodedOutputStream, value: StudyInformationType) -> None:
110
+ if isinstance(value, np.void):
111
+ self.write_numpy(stream, value)
112
+ return
113
+ self._write(stream, value.study_date, value.study_time, value.study_id, value.accession_number, value.referring_physician_name, value.study_description, value.study_instance_uid, value.body_part_examined)
114
+
115
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
116
+ self._write(stream, value['study_date'], value['study_time'], value['study_id'], value['accession_number'], value['referring_physician_name'], value['study_description'], value['study_instance_uid'], value['body_part_examined'])
117
+
118
+ def read(self, stream: _binary.CodedInputStream) -> StudyInformationType:
119
+ field_values = self._read(stream)
120
+ return StudyInformationType(study_date=field_values[0], study_time=field_values[1], study_id=field_values[2], accession_number=field_values[3], referring_physician_name=field_values[4], study_description=field_values[5], study_instance_uid=field_values[6], body_part_examined=field_values[7])
121
+
122
+
123
+ class ThreeDimensionalFloatSerializer(_binary.RecordSerializer[ThreeDimensionalFloat]):
124
+ def __init__(self) -> None:
125
+ super().__init__([("x", _binary.float32_serializer), ("y", _binary.float32_serializer), ("z", _binary.float32_serializer)])
126
+
127
+ def write(self, stream: _binary.CodedOutputStream, value: ThreeDimensionalFloat) -> None:
128
+ if isinstance(value, np.void):
129
+ self.write_numpy(stream, value)
130
+ return
131
+ self._write(stream, value.x, value.y, value.z)
132
+
133
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
134
+ self._write(stream, value['x'], value['y'], value['z'])
135
+
136
+ def read(self, stream: _binary.CodedInputStream) -> ThreeDimensionalFloat:
137
+ field_values = self._read(stream)
138
+ return ThreeDimensionalFloat(x=field_values[0], y=field_values[1], z=field_values[2])
139
+
140
+
141
+ class MeasurementDependencyTypeSerializer(_binary.RecordSerializer[MeasurementDependencyType]):
142
+ def __init__(self) -> None:
143
+ super().__init__([("dependency_type", _binary.string_serializer), ("measurement_id", _binary.string_serializer)])
144
+
145
+ def write(self, stream: _binary.CodedOutputStream, value: MeasurementDependencyType) -> None:
146
+ if isinstance(value, np.void):
147
+ self.write_numpy(stream, value)
148
+ return
149
+ self._write(stream, value.dependency_type, value.measurement_id)
150
+
151
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
152
+ self._write(stream, value['dependency_type'], value['measurement_id'])
153
+
154
+ def read(self, stream: _binary.CodedInputStream) -> MeasurementDependencyType:
155
+ field_values = self._read(stream)
156
+ return MeasurementDependencyType(dependency_type=field_values[0], measurement_id=field_values[1])
157
+
158
+
159
+ class ReferencedImageSequenceTypeSerializer(_binary.RecordSerializer[ReferencedImageSequenceType]):
160
+ def __init__(self) -> None:
161
+ super().__init__([("referenced_sop_instance_uid", _binary.VectorSerializer(_binary.string_serializer))])
162
+
163
+ def write(self, stream: _binary.CodedOutputStream, value: ReferencedImageSequenceType) -> None:
164
+ if isinstance(value, np.void):
165
+ self.write_numpy(stream, value)
166
+ return
167
+ self._write(stream, value.referenced_sop_instance_uid)
168
+
169
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
170
+ self._write(stream, value['referenced_sop_instance_uid'])
171
+
172
+ def read(self, stream: _binary.CodedInputStream) -> ReferencedImageSequenceType:
173
+ field_values = self._read(stream)
174
+ return ReferencedImageSequenceType(referenced_sop_instance_uid=field_values[0])
175
+
176
+
177
+ class MeasurementInformationTypeSerializer(_binary.RecordSerializer[MeasurementInformationType]):
178
+ def __init__(self) -> None:
179
+ super().__init__([("measurement_id", _binary.OptionalSerializer(_binary.string_serializer)), ("series_date", _binary.OptionalSerializer(_binary.date_serializer)), ("series_time", _binary.OptionalSerializer(_binary.time_serializer)), ("patient_position", _binary.EnumSerializer(_binary.int32_serializer, PatientPosition)), ("relative_table_position", _binary.OptionalSerializer(ThreeDimensionalFloatSerializer())), ("initial_series_number", _binary.OptionalSerializer(_binary.int64_serializer)), ("protocol_name", _binary.OptionalSerializer(_binary.string_serializer)), ("sequence_name", _binary.OptionalSerializer(_binary.string_serializer)), ("series_description", _binary.OptionalSerializer(_binary.string_serializer)), ("measurement_dependency", _binary.VectorSerializer(MeasurementDependencyTypeSerializer())), ("series_instance_uid_root", _binary.OptionalSerializer(_binary.string_serializer)), ("frame_of_reference_uid", _binary.OptionalSerializer(_binary.string_serializer)), ("referenced_image_sequence", _binary.OptionalSerializer(ReferencedImageSequenceTypeSerializer()))])
180
+
181
+ def write(self, stream: _binary.CodedOutputStream, value: MeasurementInformationType) -> None:
182
+ if isinstance(value, np.void):
183
+ self.write_numpy(stream, value)
184
+ return
185
+ self._write(stream, value.measurement_id, value.series_date, value.series_time, value.patient_position, value.relative_table_position, value.initial_series_number, value.protocol_name, value.sequence_name, value.series_description, value.measurement_dependency, value.series_instance_uid_root, value.frame_of_reference_uid, value.referenced_image_sequence)
186
+
187
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
188
+ self._write(stream, value['measurement_id'], value['series_date'], value['series_time'], value['patient_position'], value['relative_table_position'], value['initial_series_number'], value['protocol_name'], value['sequence_name'], value['series_description'], value['measurement_dependency'], value['series_instance_uid_root'], value['frame_of_reference_uid'], value['referenced_image_sequence'])
189
+
190
+ def read(self, stream: _binary.CodedInputStream) -> MeasurementInformationType:
191
+ field_values = self._read(stream)
192
+ return MeasurementInformationType(measurement_id=field_values[0], series_date=field_values[1], series_time=field_values[2], patient_position=field_values[3], relative_table_position=field_values[4], initial_series_number=field_values[5], protocol_name=field_values[6], sequence_name=field_values[7], series_description=field_values[8], measurement_dependency=field_values[9], series_instance_uid_root=field_values[10], frame_of_reference_uid=field_values[11], referenced_image_sequence=field_values[12])
193
+
194
+
195
+ class CoilLabelTypeSerializer(_binary.RecordSerializer[CoilLabelType]):
196
+ def __init__(self) -> None:
197
+ super().__init__([("coil_number", _binary.uint32_serializer), ("coil_name", _binary.string_serializer)])
198
+
199
+ def write(self, stream: _binary.CodedOutputStream, value: CoilLabelType) -> None:
200
+ if isinstance(value, np.void):
201
+ self.write_numpy(stream, value)
202
+ return
203
+ self._write(stream, value.coil_number, value.coil_name)
204
+
205
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
206
+ self._write(stream, value['coil_number'], value['coil_name'])
207
+
208
+ def read(self, stream: _binary.CodedInputStream) -> CoilLabelType:
209
+ field_values = self._read(stream)
210
+ return CoilLabelType(coil_number=field_values[0], coil_name=field_values[1])
211
+
212
+
213
+ class AcquisitionSystemInformationTypeSerializer(_binary.RecordSerializer[AcquisitionSystemInformationType]):
214
+ def __init__(self) -> None:
215
+ super().__init__([("system_vendor", _binary.OptionalSerializer(_binary.string_serializer)), ("system_model", _binary.OptionalSerializer(_binary.string_serializer)), ("system_field_strength_t", _binary.OptionalSerializer(_binary.float32_serializer)), ("relative_receiver_noise_bandwidth", _binary.OptionalSerializer(_binary.float32_serializer)), ("receiver_channels", _binary.OptionalSerializer(_binary.uint32_serializer)), ("coil_label", _binary.VectorSerializer(CoilLabelTypeSerializer())), ("institution_name", _binary.OptionalSerializer(_binary.string_serializer)), ("station_name", _binary.OptionalSerializer(_binary.string_serializer)), ("device_id", _binary.OptionalSerializer(_binary.string_serializer)), ("device_serial_number", _binary.OptionalSerializer(_binary.string_serializer))])
216
+
217
+ def write(self, stream: _binary.CodedOutputStream, value: AcquisitionSystemInformationType) -> None:
218
+ if isinstance(value, np.void):
219
+ self.write_numpy(stream, value)
220
+ return
221
+ self._write(stream, value.system_vendor, value.system_model, value.system_field_strength_t, value.relative_receiver_noise_bandwidth, value.receiver_channels, value.coil_label, value.institution_name, value.station_name, value.device_id, value.device_serial_number)
222
+
223
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
224
+ self._write(stream, value['system_vendor'], value['system_model'], value['system_field_strength_t'], value['relative_receiver_noise_bandwidth'], value['receiver_channels'], value['coil_label'], value['institution_name'], value['station_name'], value['device_id'], value['device_serial_number'])
225
+
226
+ def read(self, stream: _binary.CodedInputStream) -> AcquisitionSystemInformationType:
227
+ field_values = self._read(stream)
228
+ return AcquisitionSystemInformationType(system_vendor=field_values[0], system_model=field_values[1], system_field_strength_t=field_values[2], relative_receiver_noise_bandwidth=field_values[3], receiver_channels=field_values[4], coil_label=field_values[5], institution_name=field_values[6], station_name=field_values[7], device_id=field_values[8], device_serial_number=field_values[9])
229
+
230
+
231
+ class ExperimentalConditionsTypeSerializer(_binary.RecordSerializer[ExperimentalConditionsType]):
232
+ def __init__(self) -> None:
233
+ super().__init__([("h1resonance_frequency_hz", _binary.int64_serializer)])
234
+
235
+ def write(self, stream: _binary.CodedOutputStream, value: ExperimentalConditionsType) -> None:
236
+ if isinstance(value, np.void):
237
+ self.write_numpy(stream, value)
238
+ return
239
+ self._write(stream, value.h1resonance_frequency_hz)
240
+
241
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
242
+ self._write(stream, value['h1resonance_frequency_hz'])
243
+
244
+ def read(self, stream: _binary.CodedInputStream) -> ExperimentalConditionsType:
245
+ field_values = self._read(stream)
246
+ return ExperimentalConditionsType(h1resonance_frequency_hz=field_values[0])
247
+
248
+
249
+ class MatrixSizeTypeSerializer(_binary.RecordSerializer[MatrixSizeType]):
250
+ def __init__(self) -> None:
251
+ super().__init__([("x", _binary.uint32_serializer), ("y", _binary.uint32_serializer), ("z", _binary.uint32_serializer)])
252
+
253
+ def write(self, stream: _binary.CodedOutputStream, value: MatrixSizeType) -> None:
254
+ if isinstance(value, np.void):
255
+ self.write_numpy(stream, value)
256
+ return
257
+ self._write(stream, value.x, value.y, value.z)
258
+
259
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
260
+ self._write(stream, value['x'], value['y'], value['z'])
261
+
262
+ def read(self, stream: _binary.CodedInputStream) -> MatrixSizeType:
263
+ field_values = self._read(stream)
264
+ return MatrixSizeType(x=field_values[0], y=field_values[1], z=field_values[2])
265
+
266
+
267
+ class FieldOfViewMmSerializer(_binary.RecordSerializer[FieldOfViewMm]):
268
+ def __init__(self) -> None:
269
+ super().__init__([("x", _binary.float32_serializer), ("y", _binary.float32_serializer), ("z", _binary.float32_serializer)])
270
+
271
+ def write(self, stream: _binary.CodedOutputStream, value: FieldOfViewMm) -> None:
272
+ if isinstance(value, np.void):
273
+ self.write_numpy(stream, value)
274
+ return
275
+ self._write(stream, value.x, value.y, value.z)
276
+
277
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
278
+ self._write(stream, value['x'], value['y'], value['z'])
279
+
280
+ def read(self, stream: _binary.CodedInputStream) -> FieldOfViewMm:
281
+ field_values = self._read(stream)
282
+ return FieldOfViewMm(x=field_values[0], y=field_values[1], z=field_values[2])
283
+
284
+
285
+ class EncodingSpaceTypeSerializer(_binary.RecordSerializer[EncodingSpaceType]):
286
+ def __init__(self) -> None:
287
+ super().__init__([("matrix_size", MatrixSizeTypeSerializer()), ("field_of_view_mm", FieldOfViewMmSerializer())])
288
+
289
+ def write(self, stream: _binary.CodedOutputStream, value: EncodingSpaceType) -> None:
290
+ if isinstance(value, np.void):
291
+ self.write_numpy(stream, value)
292
+ return
293
+ self._write(stream, value.matrix_size, value.field_of_view_mm)
294
+
295
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
296
+ self._write(stream, value['matrix_size'], value['field_of_view_mm'])
297
+
298
+ def read(self, stream: _binary.CodedInputStream) -> EncodingSpaceType:
299
+ field_values = self._read(stream)
300
+ return EncodingSpaceType(matrix_size=field_values[0], field_of_view_mm=field_values[1])
301
+
302
+
303
+ class LimitTypeSerializer(_binary.RecordSerializer[LimitType]):
304
+ def __init__(self) -> None:
305
+ super().__init__([("minimum", _binary.uint32_serializer), ("maximum", _binary.uint32_serializer), ("center", _binary.uint32_serializer)])
306
+
307
+ def write(self, stream: _binary.CodedOutputStream, value: LimitType) -> None:
308
+ if isinstance(value, np.void):
309
+ self.write_numpy(stream, value)
310
+ return
311
+ self._write(stream, value.minimum, value.maximum, value.center)
312
+
313
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
314
+ self._write(stream, value['minimum'], value['maximum'], value['center'])
315
+
316
+ def read(self, stream: _binary.CodedInputStream) -> LimitType:
317
+ field_values = self._read(stream)
318
+ return LimitType(minimum=field_values[0], maximum=field_values[1], center=field_values[2])
319
+
320
+
321
+ class EncodingLimitsTypeSerializer(_binary.RecordSerializer[EncodingLimitsType]):
322
+ def __init__(self) -> None:
323
+ super().__init__([("kspace_encoding_step_0", _binary.OptionalSerializer(LimitTypeSerializer())), ("kspace_encoding_step_1", _binary.OptionalSerializer(LimitTypeSerializer())), ("kspace_encoding_step_2", _binary.OptionalSerializer(LimitTypeSerializer())), ("average", _binary.OptionalSerializer(LimitTypeSerializer())), ("slice", _binary.OptionalSerializer(LimitTypeSerializer())), ("contrast", _binary.OptionalSerializer(LimitTypeSerializer())), ("phase", _binary.OptionalSerializer(LimitTypeSerializer())), ("repetition", _binary.OptionalSerializer(LimitTypeSerializer())), ("set", _binary.OptionalSerializer(LimitTypeSerializer())), ("segment", _binary.OptionalSerializer(LimitTypeSerializer())), ("user_0", _binary.OptionalSerializer(LimitTypeSerializer())), ("user_1", _binary.OptionalSerializer(LimitTypeSerializer())), ("user_2", _binary.OptionalSerializer(LimitTypeSerializer())), ("user_3", _binary.OptionalSerializer(LimitTypeSerializer())), ("user_4", _binary.OptionalSerializer(LimitTypeSerializer())), ("user_5", _binary.OptionalSerializer(LimitTypeSerializer())), ("user_6", _binary.OptionalSerializer(LimitTypeSerializer())), ("user_7", _binary.OptionalSerializer(LimitTypeSerializer()))])
324
+
325
+ def write(self, stream: _binary.CodedOutputStream, value: EncodingLimitsType) -> None:
326
+ if isinstance(value, np.void):
327
+ self.write_numpy(stream, value)
328
+ return
329
+ self._write(stream, value.kspace_encoding_step_0, value.kspace_encoding_step_1, value.kspace_encoding_step_2, value.average, value.slice, value.contrast, value.phase, value.repetition, value.set, value.segment, value.user_0, value.user_1, value.user_2, value.user_3, value.user_4, value.user_5, value.user_6, value.user_7)
330
+
331
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
332
+ self._write(stream, value['kspace_encoding_step_0'], value['kspace_encoding_step_1'], value['kspace_encoding_step_2'], value['average'], value['slice'], value['contrast'], value['phase'], value['repetition'], value['set'], value['segment'], value['user_0'], value['user_1'], value['user_2'], value['user_3'], value['user_4'], value['user_5'], value['user_6'], value['user_7'])
333
+
334
+ def read(self, stream: _binary.CodedInputStream) -> EncodingLimitsType:
335
+ field_values = self._read(stream)
336
+ return EncodingLimitsType(kspace_encoding_step_0=field_values[0], kspace_encoding_step_1=field_values[1], kspace_encoding_step_2=field_values[2], average=field_values[3], slice=field_values[4], contrast=field_values[5], phase=field_values[6], repetition=field_values[7], set=field_values[8], segment=field_values[9], user_0=field_values[10], user_1=field_values[11], user_2=field_values[12], user_3=field_values[13], user_4=field_values[14], user_5=field_values[15], user_6=field_values[16], user_7=field_values[17])
337
+
338
+
339
+ class UserParameterLongTypeSerializer(_binary.RecordSerializer[UserParameterLongType]):
340
+ def __init__(self) -> None:
341
+ super().__init__([("name", _binary.string_serializer), ("value", _binary.int64_serializer)])
342
+
343
+ def write(self, stream: _binary.CodedOutputStream, value: UserParameterLongType) -> None:
344
+ if isinstance(value, np.void):
345
+ self.write_numpy(stream, value)
346
+ return
347
+ self._write(stream, value.name, value.value)
348
+
349
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
350
+ self._write(stream, value['name'], value['value'])
351
+
352
+ def read(self, stream: _binary.CodedInputStream) -> UserParameterLongType:
353
+ field_values = self._read(stream)
354
+ return UserParameterLongType(name=field_values[0], value=field_values[1])
355
+
356
+
357
+ class UserParameterDoubleTypeSerializer(_binary.RecordSerializer[UserParameterDoubleType]):
358
+ def __init__(self) -> None:
359
+ super().__init__([("name", _binary.string_serializer), ("value", _binary.float64_serializer)])
360
+
361
+ def write(self, stream: _binary.CodedOutputStream, value: UserParameterDoubleType) -> None:
362
+ if isinstance(value, np.void):
363
+ self.write_numpy(stream, value)
364
+ return
365
+ self._write(stream, value.name, value.value)
366
+
367
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
368
+ self._write(stream, value['name'], value['value'])
369
+
370
+ def read(self, stream: _binary.CodedInputStream) -> UserParameterDoubleType:
371
+ field_values = self._read(stream)
372
+ return UserParameterDoubleType(name=field_values[0], value=field_values[1])
373
+
374
+
375
+ class UserParameterStringTypeSerializer(_binary.RecordSerializer[UserParameterStringType]):
376
+ def __init__(self) -> None:
377
+ super().__init__([("name", _binary.string_serializer), ("value", _binary.string_serializer)])
378
+
379
+ def write(self, stream: _binary.CodedOutputStream, value: UserParameterStringType) -> None:
380
+ if isinstance(value, np.void):
381
+ self.write_numpy(stream, value)
382
+ return
383
+ self._write(stream, value.name, value.value)
384
+
385
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
386
+ self._write(stream, value['name'], value['value'])
387
+
388
+ def read(self, stream: _binary.CodedInputStream) -> UserParameterStringType:
389
+ field_values = self._read(stream)
390
+ return UserParameterStringType(name=field_values[0], value=field_values[1])
391
+
392
+
393
+ class TrajectoryDescriptionTypeSerializer(_binary.RecordSerializer[TrajectoryDescriptionType]):
394
+ def __init__(self) -> None:
395
+ super().__init__([("identifier", _binary.string_serializer), ("user_parameter_long", _binary.VectorSerializer(UserParameterLongTypeSerializer())), ("user_parameter_double", _binary.VectorSerializer(UserParameterDoubleTypeSerializer())), ("user_parameter_string", _binary.VectorSerializer(UserParameterStringTypeSerializer())), ("comment", _binary.OptionalSerializer(_binary.string_serializer))])
396
+
397
+ def write(self, stream: _binary.CodedOutputStream, value: TrajectoryDescriptionType) -> None:
398
+ if isinstance(value, np.void):
399
+ self.write_numpy(stream, value)
400
+ return
401
+ self._write(stream, value.identifier, value.user_parameter_long, value.user_parameter_double, value.user_parameter_string, value.comment)
402
+
403
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
404
+ self._write(stream, value['identifier'], value['user_parameter_long'], value['user_parameter_double'], value['user_parameter_string'], value['comment'])
405
+
406
+ def read(self, stream: _binary.CodedInputStream) -> TrajectoryDescriptionType:
407
+ field_values = self._read(stream)
408
+ return TrajectoryDescriptionType(identifier=field_values[0], user_parameter_long=field_values[1], user_parameter_double=field_values[2], user_parameter_string=field_values[3], comment=field_values[4])
409
+
410
+
411
+ class AccelerationFactorTypeSerializer(_binary.RecordSerializer[AccelerationFactorType]):
412
+ def __init__(self) -> None:
413
+ super().__init__([("kspace_encoding_step_1", _binary.uint32_serializer), ("kspace_encoding_step_2", _binary.uint32_serializer)])
414
+
415
+ def write(self, stream: _binary.CodedOutputStream, value: AccelerationFactorType) -> None:
416
+ if isinstance(value, np.void):
417
+ self.write_numpy(stream, value)
418
+ return
419
+ self._write(stream, value.kspace_encoding_step_1, value.kspace_encoding_step_2)
420
+
421
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
422
+ self._write(stream, value['kspace_encoding_step_1'], value['kspace_encoding_step_2'])
423
+
424
+ def read(self, stream: _binary.CodedInputStream) -> AccelerationFactorType:
425
+ field_values = self._read(stream)
426
+ return AccelerationFactorType(kspace_encoding_step_1=field_values[0], kspace_encoding_step_2=field_values[1])
427
+
428
+
429
+ class MultibandSpacingTypeSerializer(_binary.RecordSerializer[MultibandSpacingType]):
430
+ def __init__(self) -> None:
431
+ super().__init__([("d_z", _binary.VectorSerializer(_binary.float32_serializer))])
432
+
433
+ def write(self, stream: _binary.CodedOutputStream, value: MultibandSpacingType) -> None:
434
+ if isinstance(value, np.void):
435
+ self.write_numpy(stream, value)
436
+ return
437
+ self._write(stream, value.d_z)
438
+
439
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
440
+ self._write(stream, value['d_z'])
441
+
442
+ def read(self, stream: _binary.CodedInputStream) -> MultibandSpacingType:
443
+ field_values = self._read(stream)
444
+ return MultibandSpacingType(d_z=field_values[0])
445
+
446
+
447
+ class MultibandTypeSerializer(_binary.RecordSerializer[MultibandType]):
448
+ def __init__(self) -> None:
449
+ super().__init__([("spacing", _binary.VectorSerializer(MultibandSpacingTypeSerializer())), ("delta_kz", _binary.float32_serializer), ("multiband_factor", _binary.uint32_serializer), ("calibration", _binary.EnumSerializer(_binary.int32_serializer, Calibration)), ("calibration_encoding", _binary.uint64_serializer)])
450
+
451
+ def write(self, stream: _binary.CodedOutputStream, value: MultibandType) -> None:
452
+ if isinstance(value, np.void):
453
+ self.write_numpy(stream, value)
454
+ return
455
+ self._write(stream, value.spacing, value.delta_kz, value.multiband_factor, value.calibration, value.calibration_encoding)
456
+
457
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
458
+ self._write(stream, value['spacing'], value['delta_kz'], value['multiband_factor'], value['calibration'], value['calibration_encoding'])
459
+
460
+ def read(self, stream: _binary.CodedInputStream) -> MultibandType:
461
+ field_values = self._read(stream)
462
+ return MultibandType(spacing=field_values[0], delta_kz=field_values[1], multiband_factor=field_values[2], calibration=field_values[3], calibration_encoding=field_values[4])
463
+
464
+
465
+ class ParallelImagingTypeSerializer(_binary.RecordSerializer[ParallelImagingType]):
466
+ def __init__(self) -> None:
467
+ super().__init__([("acceleration_factor", AccelerationFactorTypeSerializer()), ("calibration_mode", _binary.OptionalSerializer(_binary.EnumSerializer(_binary.int32_serializer, CalibrationMode))), ("interleaving_dimension", _binary.OptionalSerializer(_binary.EnumSerializer(_binary.int32_serializer, InterleavingDimension))), ("multiband", _binary.OptionalSerializer(MultibandTypeSerializer()))])
468
+
469
+ def write(self, stream: _binary.CodedOutputStream, value: ParallelImagingType) -> None:
470
+ if isinstance(value, np.void):
471
+ self.write_numpy(stream, value)
472
+ return
473
+ self._write(stream, value.acceleration_factor, value.calibration_mode, value.interleaving_dimension, value.multiband)
474
+
475
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
476
+ self._write(stream, value['acceleration_factor'], value['calibration_mode'], value['interleaving_dimension'], value['multiband'])
477
+
478
+ def read(self, stream: _binary.CodedInputStream) -> ParallelImagingType:
479
+ field_values = self._read(stream)
480
+ return ParallelImagingType(acceleration_factor=field_values[0], calibration_mode=field_values[1], interleaving_dimension=field_values[2], multiband=field_values[3])
481
+
482
+
483
+ class EncodingTypeSerializer(_binary.RecordSerializer[EncodingType]):
484
+ def __init__(self) -> None:
485
+ super().__init__([("encoded_space", EncodingSpaceTypeSerializer()), ("recon_space", EncodingSpaceTypeSerializer()), ("encoding_limits", EncodingLimitsTypeSerializer()), ("trajectory", _binary.EnumSerializer(_binary.int32_serializer, Trajectory)), ("trajectory_description", _binary.OptionalSerializer(TrajectoryDescriptionTypeSerializer())), ("parallel_imaging", _binary.OptionalSerializer(ParallelImagingTypeSerializer())), ("echo_train_length", _binary.OptionalSerializer(_binary.int64_serializer))])
486
+
487
+ def write(self, stream: _binary.CodedOutputStream, value: EncodingType) -> None:
488
+ if isinstance(value, np.void):
489
+ self.write_numpy(stream, value)
490
+ return
491
+ self._write(stream, value.encoded_space, value.recon_space, value.encoding_limits, value.trajectory, value.trajectory_description, value.parallel_imaging, value.echo_train_length)
492
+
493
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
494
+ self._write(stream, value['encoded_space'], value['recon_space'], value['encoding_limits'], value['trajectory'], value['trajectory_description'], value['parallel_imaging'], value['echo_train_length'])
495
+
496
+ def read(self, stream: _binary.CodedInputStream) -> EncodingType:
497
+ field_values = self._read(stream)
498
+ return EncodingType(encoded_space=field_values[0], recon_space=field_values[1], encoding_limits=field_values[2], trajectory=field_values[3], trajectory_description=field_values[4], parallel_imaging=field_values[5], echo_train_length=field_values[6])
499
+
500
+
501
+ class GradientDirectionTypeSerializer(_binary.RecordSerializer[GradientDirectionType]):
502
+ def __init__(self) -> None:
503
+ super().__init__([("rl", _binary.float32_serializer), ("ap", _binary.float32_serializer), ("fh", _binary.float32_serializer)])
504
+
505
+ def write(self, stream: _binary.CodedOutputStream, value: GradientDirectionType) -> None:
506
+ if isinstance(value, np.void):
507
+ self.write_numpy(stream, value)
508
+ return
509
+ self._write(stream, value.rl, value.ap, value.fh)
510
+
511
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
512
+ self._write(stream, value['rl'], value['ap'], value['fh'])
513
+
514
+ def read(self, stream: _binary.CodedInputStream) -> GradientDirectionType:
515
+ field_values = self._read(stream)
516
+ return GradientDirectionType(rl=field_values[0], ap=field_values[1], fh=field_values[2])
517
+
518
+
519
+ class DiffusionTypeSerializer(_binary.RecordSerializer[DiffusionType]):
520
+ def __init__(self) -> None:
521
+ super().__init__([("gradient_direction", GradientDirectionTypeSerializer()), ("bvalue", _binary.float32_serializer)])
522
+
523
+ def write(self, stream: _binary.CodedOutputStream, value: DiffusionType) -> None:
524
+ if isinstance(value, np.void):
525
+ self.write_numpy(stream, value)
526
+ return
527
+ self._write(stream, value.gradient_direction, value.bvalue)
528
+
529
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
530
+ self._write(stream, value['gradient_direction'], value['bvalue'])
531
+
532
+ def read(self, stream: _binary.CodedInputStream) -> DiffusionType:
533
+ field_values = self._read(stream)
534
+ return DiffusionType(gradient_direction=field_values[0], bvalue=field_values[1])
535
+
536
+
537
+ class SequenceParametersTypeSerializer(_binary.RecordSerializer[SequenceParametersType]):
538
+ def __init__(self) -> None:
539
+ super().__init__([("t_r", _binary.VectorSerializer(_binary.float32_serializer)), ("t_e", _binary.VectorSerializer(_binary.float32_serializer)), ("t_i", _binary.VectorSerializer(_binary.float32_serializer)), ("flip_angle_deg", _binary.VectorSerializer(_binary.float32_serializer)), ("sequence_type", _binary.OptionalSerializer(_binary.string_serializer)), ("echo_spacing", _binary.VectorSerializer(_binary.float32_serializer)), ("diffusion_dimension", _binary.OptionalSerializer(_binary.EnumSerializer(_binary.int32_serializer, DiffusionDimension))), ("diffusion", _binary.VectorSerializer(DiffusionTypeSerializer())), ("diffusion_scheme", _binary.OptionalSerializer(_binary.string_serializer))])
540
+
541
+ def write(self, stream: _binary.CodedOutputStream, value: SequenceParametersType) -> None:
542
+ if isinstance(value, np.void):
543
+ self.write_numpy(stream, value)
544
+ return
545
+ self._write(stream, value.t_r, value.t_e, value.t_i, value.flip_angle_deg, value.sequence_type, value.echo_spacing, value.diffusion_dimension, value.diffusion, value.diffusion_scheme)
546
+
547
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
548
+ self._write(stream, value['t_r'], value['t_e'], value['t_i'], value['flip_angle_deg'], value['sequence_type'], value['echo_spacing'], value['diffusion_dimension'], value['diffusion'], value['diffusion_scheme'])
549
+
550
+ def read(self, stream: _binary.CodedInputStream) -> SequenceParametersType:
551
+ field_values = self._read(stream)
552
+ return SequenceParametersType(t_r=field_values[0], t_e=field_values[1], t_i=field_values[2], flip_angle_deg=field_values[3], sequence_type=field_values[4], echo_spacing=field_values[5], diffusion_dimension=field_values[6], diffusion=field_values[7], diffusion_scheme=field_values[8])
553
+
554
+
555
+ class UserParameterBase64TypeSerializer(_binary.RecordSerializer[UserParameterBase64Type]):
556
+ def __init__(self) -> None:
557
+ super().__init__([("name", _binary.string_serializer), ("value", _binary.string_serializer)])
558
+
559
+ def write(self, stream: _binary.CodedOutputStream, value: UserParameterBase64Type) -> None:
560
+ if isinstance(value, np.void):
561
+ self.write_numpy(stream, value)
562
+ return
563
+ self._write(stream, value.name, value.value)
564
+
565
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
566
+ self._write(stream, value['name'], value['value'])
567
+
568
+ def read(self, stream: _binary.CodedInputStream) -> UserParameterBase64Type:
569
+ field_values = self._read(stream)
570
+ return UserParameterBase64Type(name=field_values[0], value=field_values[1])
571
+
572
+
573
+ class UserParametersTypeSerializer(_binary.RecordSerializer[UserParametersType]):
574
+ def __init__(self) -> None:
575
+ super().__init__([("user_parameter_long", _binary.VectorSerializer(UserParameterLongTypeSerializer())), ("user_parameter_double", _binary.VectorSerializer(UserParameterDoubleTypeSerializer())), ("user_parameter_string", _binary.VectorSerializer(UserParameterStringTypeSerializer())), ("user_parameter_base64", _binary.VectorSerializer(UserParameterBase64TypeSerializer()))])
576
+
577
+ def write(self, stream: _binary.CodedOutputStream, value: UserParametersType) -> None:
578
+ if isinstance(value, np.void):
579
+ self.write_numpy(stream, value)
580
+ return
581
+ self._write(stream, value.user_parameter_long, value.user_parameter_double, value.user_parameter_string, value.user_parameter_base64)
582
+
583
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
584
+ self._write(stream, value['user_parameter_long'], value['user_parameter_double'], value['user_parameter_string'], value['user_parameter_base64'])
585
+
586
+ def read(self, stream: _binary.CodedInputStream) -> UserParametersType:
587
+ field_values = self._read(stream)
588
+ return UserParametersType(user_parameter_long=field_values[0], user_parameter_double=field_values[1], user_parameter_string=field_values[2], user_parameter_base64=field_values[3])
589
+
590
+
591
+ class WaveformInformationTypeSerializer(_binary.RecordSerializer[WaveformInformationType]):
592
+ def __init__(self) -> None:
593
+ super().__init__([("waveform_name", _binary.string_serializer), ("waveform_type", _binary.EnumSerializer(_binary.int32_serializer, WaveformType)), ("user_parameters", UserParametersTypeSerializer())])
594
+
595
+ def write(self, stream: _binary.CodedOutputStream, value: WaveformInformationType) -> None:
596
+ if isinstance(value, np.void):
597
+ self.write_numpy(stream, value)
598
+ return
599
+ self._write(stream, value.waveform_name, value.waveform_type, value.user_parameters)
600
+
601
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
602
+ self._write(stream, value['waveform_name'], value['waveform_type'], value['user_parameters'])
603
+
604
+ def read(self, stream: _binary.CodedInputStream) -> WaveformInformationType:
605
+ field_values = self._read(stream)
606
+ return WaveformInformationType(waveform_name=field_values[0], waveform_type=field_values[1], user_parameters=field_values[2])
607
+
608
+
609
+ class HeaderSerializer(_binary.RecordSerializer[Header]):
610
+ def __init__(self) -> None:
611
+ super().__init__([("version", _binary.OptionalSerializer(_binary.int64_serializer)), ("subject_information", _binary.OptionalSerializer(SubjectInformationTypeSerializer())), ("study_information", _binary.OptionalSerializer(StudyInformationTypeSerializer())), ("measurement_information", _binary.OptionalSerializer(MeasurementInformationTypeSerializer())), ("acquisition_system_information", _binary.OptionalSerializer(AcquisitionSystemInformationTypeSerializer())), ("experimental_conditions", ExperimentalConditionsTypeSerializer()), ("encoding", _binary.VectorSerializer(EncodingTypeSerializer())), ("sequence_parameters", _binary.OptionalSerializer(SequenceParametersTypeSerializer())), ("user_parameters", _binary.OptionalSerializer(UserParametersTypeSerializer())), ("waveform_information", _binary.VectorSerializer(WaveformInformationTypeSerializer()))])
612
+
613
+ def write(self, stream: _binary.CodedOutputStream, value: Header) -> None:
614
+ if isinstance(value, np.void):
615
+ self.write_numpy(stream, value)
616
+ return
617
+ self._write(stream, value.version, value.subject_information, value.study_information, value.measurement_information, value.acquisition_system_information, value.experimental_conditions, value.encoding, value.sequence_parameters, value.user_parameters, value.waveform_information)
618
+
619
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
620
+ self._write(stream, value['version'], value['subject_information'], value['study_information'], value['measurement_information'], value['acquisition_system_information'], value['experimental_conditions'], value['encoding'], value['sequence_parameters'], value['user_parameters'], value['waveform_information'])
621
+
622
+ def read(self, stream: _binary.CodedInputStream) -> Header:
623
+ field_values = self._read(stream)
624
+ return Header(version=field_values[0], subject_information=field_values[1], study_information=field_values[2], measurement_information=field_values[3], acquisition_system_information=field_values[4], experimental_conditions=field_values[5], encoding=field_values[6], sequence_parameters=field_values[7], user_parameters=field_values[8], waveform_information=field_values[9])
625
+
626
+
627
+ class ImageMetaDataSerializer(_binary.RecordSerializer[ImageMetaData]):
628
+ def __init__(self) -> None:
629
+ super().__init__([("name", _binary.string_serializer), ("value", _binary.string_serializer)])
630
+
631
+ def write(self, stream: _binary.CodedOutputStream, value: ImageMetaData) -> None:
632
+ if isinstance(value, np.void):
633
+ self.write_numpy(stream, value)
634
+ return
635
+ self._write(stream, value.name, value.value)
636
+
637
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
638
+ self._write(stream, value['name'], value['value'])
639
+
640
+ def read(self, stream: _binary.CodedInputStream) -> ImageMetaData:
641
+ field_values = self._read(stream)
642
+ return ImageMetaData(name=field_values[0], value=field_values[1])
643
+
644
+
645
+ class ImageSerializer(typing.Generic[T, T_NP], _binary.RecordSerializer[Image[T_NP]]):
646
+ def __init__(self, t_serializer: _binary.TypeSerializer[T, T_NP]) -> None:
647
+ super().__init__([("flags", _binary.EnumSerializer(_binary.uint64_serializer, ImageFlags)), ("measurement_uid", _binary.uint32_serializer), ("field_of_view", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("position", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("col_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("line_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("slice_dir", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("patient_table_position", _binary.FixedNDArraySerializer(_binary.float32_serializer, (3,))), ("average", _binary.OptionalSerializer(_binary.uint32_serializer)), ("slice", _binary.OptionalSerializer(_binary.uint32_serializer)), ("contrast", _binary.OptionalSerializer(_binary.uint32_serializer)), ("phase", _binary.OptionalSerializer(_binary.uint32_serializer)), ("repetition", _binary.OptionalSerializer(_binary.uint32_serializer)), ("set", _binary.OptionalSerializer(_binary.uint32_serializer)), ("acquisition_time_stamp", _binary.OptionalSerializer(_binary.uint32_serializer)), ("physiology_time_stamp", _binary.VectorSerializer(_binary.uint32_serializer)), ("image_type", _binary.EnumSerializer(_binary.int32_serializer, ImageType)), ("image_index", _binary.OptionalSerializer(_binary.uint32_serializer)), ("image_series_index", _binary.OptionalSerializer(_binary.uint32_serializer)), ("user_int", _binary.VectorSerializer(_binary.int32_serializer)), ("user_float", _binary.VectorSerializer(_binary.float32_serializer)), ("data", _binary.NDArraySerializer(t_serializer, 4)), ("meta", _binary.MapSerializer(_binary.string_serializer, _binary.VectorSerializer(_binary.string_serializer)))])
648
+
649
+ def write(self, stream: _binary.CodedOutputStream, value: Image[T_NP]) -> None:
650
+ if isinstance(value, np.void):
651
+ self.write_numpy(stream, value)
652
+ return
653
+ self._write(stream, value.flags, value.measurement_uid, value.field_of_view, value.position, value.col_dir, value.line_dir, value.slice_dir, value.patient_table_position, value.average, value.slice, value.contrast, value.phase, value.repetition, value.set, value.acquisition_time_stamp, value.physiology_time_stamp, value.image_type, value.image_index, value.image_series_index, value.user_int, value.user_float, value.data, value.meta)
654
+
655
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
656
+ self._write(stream, value['flags'], value['measurement_uid'], value['field_of_view'], value['position'], value['col_dir'], value['line_dir'], value['slice_dir'], value['patient_table_position'], value['average'], value['slice'], value['contrast'], value['phase'], value['repetition'], value['set'], value['acquisition_time_stamp'], value['physiology_time_stamp'], value['image_type'], value['image_index'], value['image_series_index'], value['user_int'], value['user_float'], value['data'], value['meta'])
657
+
658
+ def read(self, stream: _binary.CodedInputStream) -> Image[T_NP]:
659
+ field_values = self._read(stream)
660
+ return Image[T_NP](flags=field_values[0], measurement_uid=field_values[1], field_of_view=field_values[2], position=field_values[3], col_dir=field_values[4], line_dir=field_values[5], slice_dir=field_values[6], patient_table_position=field_values[7], average=field_values[8], slice=field_values[9], contrast=field_values[10], phase=field_values[11], repetition=field_values[12], set=field_values[13], acquisition_time_stamp=field_values[14], physiology_time_stamp=field_values[15], image_type=field_values[16], image_index=field_values[17], image_series_index=field_values[18], user_int=field_values[19], user_float=field_values[20], data=field_values[21], meta=field_values[22])
661
+
662
+
663
+ class WaveformSerializer(typing.Generic[T, T_NP], _binary.RecordSerializer[Waveform[T_NP]]):
664
+ def __init__(self, t_serializer: _binary.TypeSerializer[T, T_NP]) -> None:
665
+ super().__init__([("flags", _binary.uint64_serializer), ("measurement_uid", _binary.uint32_serializer), ("scan_counter", _binary.uint32_serializer), ("time_stamp", _binary.uint32_serializer), ("sample_time_us", _binary.float32_serializer), ("waveform_id", _binary.uint32_serializer), ("data", _binary.NDArraySerializer(t_serializer, 2))])
666
+
667
+ def write(self, stream: _binary.CodedOutputStream, value: Waveform[T_NP]) -> None:
668
+ if isinstance(value, np.void):
669
+ self.write_numpy(stream, value)
670
+ return
671
+ self._write(stream, value.flags, value.measurement_uid, value.scan_counter, value.time_stamp, value.sample_time_us, value.waveform_id, value.data)
672
+
673
+ def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
674
+ self._write(stream, value['flags'], value['measurement_uid'], value['scan_counter'], value['time_stamp'], value['sample_time_us'], value['waveform_id'], value['data'])
675
+
676
+ def read(self, stream: _binary.CodedInputStream) -> Waveform[T_NP]:
677
+ field_values = self._read(stream)
678
+ return Waveform[T_NP](flags=field_values[0], measurement_uid=field_values[1], scan_counter=field_values[2], time_stamp=field_values[3], sample_time_us=field_values[4], waveform_id=field_values[5], data=field_values[6])
679
+
680
+