mrd-python 2.1.1__tar.gz → 2.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. {mrd_python-2.1.1 → mrd_python-2.2.0}/PKG-INFO +4 -3
  2. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd/_binary.py +6 -6
  3. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd/_dtypes.py +10 -5
  4. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd/_ndjson.py +1 -1
  5. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd/binary.py +20 -20
  6. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd/ndjson.py +58 -58
  7. mrd_python-2.2.0/mrd/protocols.py +320 -0
  8. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd/tools/export_png_images.py +6 -3
  9. mrd_python-2.2.0/mrd/tools/ismrmrd_to_mrd.py +655 -0
  10. mrd_python-2.2.0/mrd/tools/mrd_to_ismrmrd.py +696 -0
  11. mrd_python-2.2.0/mrd/tools/phantom.py +277 -0
  12. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd/tools/simulation.py +4 -3
  13. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd/tools/stream_recon.py +2 -2
  14. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd/types.py +100 -100
  15. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd/yardl_types.py +5 -4
  16. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd_python.egg-info/PKG-INFO +4 -3
  17. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd_python.egg-info/SOURCES.txt +2 -0
  18. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd_python.egg-info/requires.txt +1 -0
  19. {mrd_python-2.1.1 → mrd_python-2.2.0}/pyproject.toml +6 -2
  20. mrd_python-2.2.0/setup.py +7 -0
  21. mrd_python-2.1.1/mrd/protocols.py +0 -318
  22. mrd_python-2.1.1/mrd/tools/phantom.py +0 -161
  23. mrd_python-2.1.1/setup.py +0 -7
  24. {mrd_python-2.1.1 → mrd_python-2.2.0}/README.md +0 -0
  25. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd/__init__.py +0 -0
  26. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd/tools/minimal_example.py +0 -0
  27. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd/tools/transform.py +0 -0
  28. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd_python.egg-info/dependency_links.txt +0 -0
  29. {mrd_python-2.1.1 → mrd_python-2.2.0}/mrd_python.egg-info/top_level.txt +0 -0
  30. {mrd_python-2.1.1 → mrd_python-2.2.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: mrd-python
3
- Version: 2.1.1
3
+ Version: 2.2.0
4
4
  Summary: Library and tools for working with data in the ISMRM Raw Data (MRD) format.
5
5
  Project-URL: Homepage, https://ismrmrd.github.io/mrd
6
6
  Project-URL: Documentation, https://ismrmrd.github.io/mrd
@@ -11,8 +11,9 @@ Classifier: License :: OSI Approved :: MIT License
11
11
  Classifier: Operating System :: OS Independent
12
12
  Classifier: Intended Audience :: Science/Research
13
13
  Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
14
- Requires-Python: >=3.9
14
+ Requires-Python: >=3.12
15
15
  Description-Content-Type: text/markdown
16
+ Requires-Dist: ismrmrd>=1.14.2
16
17
  Requires-Dist: numpy>=1.22.0
17
18
  Requires-Dist: pillow>=9.2.0
18
19
 
@@ -632,7 +632,7 @@ class Complex32Serializer(StructSerializer[ComplexFloat, np.complex64]):
632
632
  stream.write(self._struct, value.real, value.imag)
633
633
 
634
634
  def read(self, stream: CodedInputStream) -> ComplexFloat:
635
- return ComplexFloat(*stream.read(self._struct))
635
+ return complex(*stream.read(self._struct))
636
636
 
637
637
  def read_numpy(self, stream: CodedInputStream) -> np.complex64:
638
638
  real, imag = stream.read(self._struct)
@@ -656,7 +656,7 @@ class Complex64Serializer(StructSerializer[ComplexDouble, np.complex128]):
656
656
  stream.write(self._struct, value.real, value.imag)
657
657
 
658
658
  def read(self, stream: CodedInputStream) -> ComplexDouble:
659
- return ComplexDouble(*stream.read(self._struct))
659
+ return complex(*stream.read(self._struct))
660
660
 
661
661
  def read_numpy(self, stream: CodedInputStream) -> np.complex128:
662
662
  real, imag = stream.read(self._struct)
@@ -687,7 +687,7 @@ class StringSerializer(TypeSerializer[str, np.object_]):
687
687
  return str(view, "utf-8")
688
688
 
689
689
  def read_numpy(self, stream: CodedInputStream) -> np.object_:
690
- return np.object_(self.read(stream))
690
+ return np.object_(self.read(stream)) # pyright: ignore [reportReturnType]
691
691
 
692
692
 
693
693
  string_serializer = StringSerializer()
@@ -770,7 +770,7 @@ class TimeSerializer(TypeSerializer[Time, np.timedelta64]):
770
770
  time_serializer = TimeSerializer()
771
771
 
772
772
  DATETIME_NANOSECONDS_DTYPE = np.dtype("datetime64[ns]")
773
- EPOCH_DATETIME = datetime.datetime.utcfromtimestamp(0)
773
+ EPOCH_DATETIME = datetime.datetime.fromtimestamp(0, tz=datetime.timezone.utc)
774
774
 
775
775
 
776
776
  class DateTimeSerializer(TypeSerializer[DateTime, np.datetime64]):
@@ -1034,7 +1034,7 @@ class VectorSerializer(Generic[T, T_NP], TypeSerializer[list[T], np.object_]):
1034
1034
  return [self._element_serializer.read(stream) for _ in range(length)]
1035
1035
 
1036
1036
  def read_numpy(self, stream: CodedInputStream) -> np.object_:
1037
- return np.object_(self.read(stream))
1037
+ return np.object_(self.read(stream)) # pyright: ignore [reportReturnType]
1038
1038
 
1039
1039
 
1040
1040
  TKey = TypeVar("TKey")
@@ -1073,7 +1073,7 @@ class MapSerializer(
1073
1073
  }
1074
1074
 
1075
1075
  def read_numpy(self, stream: CodedInputStream) -> np.object_:
1076
- return np.object_(self.read(stream))
1076
+ return np.object_(self.read(stream)) # pyright: ignore [reportReturnType]
1077
1077
 
1078
1078
 
1079
1079
  class NDArraySerializerBase(
@@ -3,6 +3,7 @@
3
3
 
4
4
  import datetime
5
5
  from types import GenericAlias
6
+ from typing import Annotated, Any
6
7
  import sys
7
8
 
8
9
  if sys.version_info >= (3, 10):
@@ -15,10 +16,13 @@ from . import yardl_types as yardl
15
16
 
16
17
  def make_get_dtype_func(
17
18
  dtype_map: dict[
18
- Union[type, GenericAlias],
19
+ Union[type, GenericAlias, Annotated[Any, Any]],
19
20
  Union[np.dtype[Any], Callable[[tuple[type, ...]], np.dtype[Any]]],
20
- ]
21
- ) -> Callable[[Union[type, GenericAlias]], np.dtype[Any]]:
21
+ ],
22
+ ) -> Callable[
23
+ [Union[type, GenericAlias, Annotated[Any, Any]]],
24
+ np.dtype[Any],
25
+ ]:
22
26
  dtype_map[bool] = np.dtype(np.bool_)
23
27
  dtype_map[yardl.Int8] = np.dtype(np.int8)
24
28
  dtype_map[yardl.UInt8] = np.dtype(np.uint8)
@@ -50,7 +54,7 @@ def make_get_dtype_func(
50
54
 
51
55
  def get_dtype_impl(
52
56
  dtype_map: dict[
53
- Union[type, GenericAlias],
57
+ Union[type, GenericAlias, Annotated[Any, Any]],
54
58
  Union[np.dtype[Any], Callable[[tuple[type, ...]], np.dtype[Any]]],
55
59
  ],
56
60
  t: Union[type, GenericAlias],
@@ -65,7 +69,8 @@ def make_get_dtype_func(
65
69
  origin = get_origin(t)
66
70
 
67
71
  if origin == Union or (
68
- sys.version_info >= (3, 10) and isinstance(t, UnionType)
72
+ sys.version_info >= (3, 10)
73
+ and isinstance(t, UnionType) # pyright: ignore[reportUnnecessaryIsInstance]
69
74
  ):
70
75
  return _get_union_dtype(get_args(t))
71
76
 
@@ -568,7 +568,7 @@ class StringConverter(JsonConverter[str, np.object_]):
568
568
  return cast(str, json_object)
569
569
 
570
570
  def from_json_to_numpy(self, json_object: object) -> np.object_:
571
- return np.object_(json_object)
571
+ return np.object_(json_object) # pyright: ignore [reportReturnType]
572
572
 
573
573
 
574
574
  string_converter = StringConverter()
@@ -44,8 +44,8 @@ class BinaryMrdReader(_binary.BinaryProtocolReader, MrdReaderBase):
44
44
  """
45
45
 
46
46
 
47
- def __init__(self, stream: typing.Union[io.BufferedReader, io.BytesIO, typing.BinaryIO, str]) -> None:
48
- MrdReaderBase.__init__(self)
47
+ def __init__(self, stream: typing.Union[io.BufferedReader, io.BytesIO, typing.BinaryIO, str], skip_completed_check: bool = False) -> None:
48
+ MrdReaderBase.__init__(self, skip_completed_check)
49
49
  _binary.BinaryProtocolReader.__init__(self, stream, MrdReaderBase.schema)
50
50
 
51
51
  def _read_header(self) -> typing.Optional[Header]:
@@ -76,8 +76,8 @@ class BinaryMrdNoiseCovarianceReader(_binary.BinaryProtocolReader, MrdNoiseCovar
76
76
  """
77
77
 
78
78
 
79
- def __init__(self, stream: typing.Union[io.BufferedReader, io.BytesIO, typing.BinaryIO, str]) -> None:
80
- MrdNoiseCovarianceReaderBase.__init__(self)
79
+ def __init__(self, stream: typing.Union[io.BufferedReader, io.BytesIO, typing.BinaryIO, str], skip_completed_check: bool = False) -> None:
80
+ MrdNoiseCovarianceReaderBase.__init__(self, skip_completed_check)
81
81
  _binary.BinaryProtocolReader.__init__(self, stream, MrdNoiseCovarianceReaderBase.schema)
82
82
 
83
83
  def _read_noise_covariance(self) -> NoiseCovariance:
@@ -103,20 +103,20 @@ class EncodingCountersSerializer(_binary.RecordSerializer[EncodingCounters]):
103
103
 
104
104
  class AcquisitionHeaderSerializer(_binary.RecordSerializer[AcquisitionHeader]):
105
105
  def __init__(self) -> None:
106
- 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))])
106
+ 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_ns", _binary.OptionalSerializer(_binary.uint64_serializer)), ("physiology_time_stamp_ns", _binary.VectorSerializer(_binary.uint64_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_ns", _binary.OptionalSerializer(_binary.uint64_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))])
107
107
 
108
108
  def write(self, stream: _binary.CodedOutputStream, value: AcquisitionHeader) -> None:
109
109
  if isinstance(value, np.void):
110
110
  self.write_numpy(stream, value)
111
111
  return
112
- 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)
112
+ self._write(stream, value.flags, value.idx, value.measurement_uid, value.scan_counter, value.acquisition_time_stamp_ns, value.physiology_time_stamp_ns, value.channel_order, value.discard_pre, value.discard_post, value.center_sample, value.encoding_space_ref, value.sample_time_ns, value.position, value.read_dir, value.phase_dir, value.slice_dir, value.patient_table_position, value.user_int, value.user_float)
113
113
 
114
114
  def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
115
- 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'])
115
+ self._write(stream, value['flags'], value['idx'], value['measurement_uid'], value['scan_counter'], value['acquisition_time_stamp_ns'], value['physiology_time_stamp_ns'], value['channel_order'], value['discard_pre'], value['discard_post'], value['center_sample'], value['encoding_space_ref'], value['sample_time_ns'], value['position'], value['read_dir'], value['phase_dir'], value['slice_dir'], value['patient_table_position'], value['user_int'], value['user_float'])
116
116
 
117
117
  def read(self, stream: _binary.CodedInputStream) -> AcquisitionHeader:
118
118
  field_values = self._read(stream)
119
- return AcquisitionHeader(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])
119
+ return AcquisitionHeader(flags=field_values[0], idx=field_values[1], measurement_uid=field_values[2], scan_counter=field_values[3], acquisition_time_stamp_ns=field_values[4], physiology_time_stamp_ns=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_ns=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])
120
120
 
121
121
 
122
122
  class AcquisitionSerializer(_binary.RecordSerializer[Acquisition]):
@@ -679,20 +679,20 @@ class HeaderSerializer(_binary.RecordSerializer[Header]):
679
679
 
680
680
  class ImageHeaderSerializer(_binary.RecordSerializer[ImageHeader]):
681
681
  def __init__(self) -> None:
682
- 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))])
682
+ 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_ns", _binary.OptionalSerializer(_binary.uint64_serializer)), ("physiology_time_stamp_ns", _binary.VectorSerializer(_binary.uint64_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))])
683
683
 
684
684
  def write(self, stream: _binary.CodedOutputStream, value: ImageHeader) -> None:
685
685
  if isinstance(value, np.void):
686
686
  self.write_numpy(stream, value)
687
687
  return
688
- 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)
688
+ 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_ns, value.physiology_time_stamp_ns, value.image_type, value.image_index, value.image_series_index, value.user_int, value.user_float)
689
689
 
690
690
  def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
691
- 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'])
691
+ 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_ns'], value['physiology_time_stamp_ns'], value['image_type'], value['image_index'], value['image_series_index'], value['user_int'], value['user_float'])
692
692
 
693
693
  def read(self, stream: _binary.CodedInputStream) -> ImageHeader:
694
694
  field_values = self._read(stream)
695
- return ImageHeader(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])
695
+ return ImageHeader(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_ns=field_values[14], physiology_time_stamp_ns=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])
696
696
 
697
697
 
698
698
  class ImageSerializer(typing.Generic[T, T_NP], _binary.RecordSerializer[Image[T_NP]]):
@@ -715,38 +715,38 @@ class ImageSerializer(typing.Generic[T, T_NP], _binary.RecordSerializer[Image[T_
715
715
 
716
716
  class NoiseCovarianceSerializer(_binary.RecordSerializer[NoiseCovariance]):
717
717
  def __init__(self) -> None:
718
- super().__init__([("coil_labels", _binary.VectorSerializer(CoilLabelTypeSerializer())), ("receiver_noise_bandwidth", _binary.float32_serializer), ("noise_dwell_time_us", _binary.float32_serializer), ("sample_count", _binary.size_serializer), ("matrix", _binary.NDArraySerializer(_binary.complexfloat32_serializer, 2))])
718
+ super().__init__([("coil_labels", _binary.VectorSerializer(CoilLabelTypeSerializer())), ("receiver_noise_bandwidth", _binary.float32_serializer), ("noise_dwell_time_ns", _binary.uint64_serializer), ("sample_count", _binary.size_serializer), ("matrix", _binary.NDArraySerializer(_binary.complexfloat32_serializer, 2))])
719
719
 
720
720
  def write(self, stream: _binary.CodedOutputStream, value: NoiseCovariance) -> None:
721
721
  if isinstance(value, np.void):
722
722
  self.write_numpy(stream, value)
723
723
  return
724
- self._write(stream, value.coil_labels, value.receiver_noise_bandwidth, value.noise_dwell_time_us, value.sample_count, value.matrix)
724
+ self._write(stream, value.coil_labels, value.receiver_noise_bandwidth, value.noise_dwell_time_ns, value.sample_count, value.matrix)
725
725
 
726
726
  def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
727
- self._write(stream, value['coil_labels'], value['receiver_noise_bandwidth'], value['noise_dwell_time_us'], value['sample_count'], value['matrix'])
727
+ self._write(stream, value['coil_labels'], value['receiver_noise_bandwidth'], value['noise_dwell_time_ns'], value['sample_count'], value['matrix'])
728
728
 
729
729
  def read(self, stream: _binary.CodedInputStream) -> NoiseCovariance:
730
730
  field_values = self._read(stream)
731
- return NoiseCovariance(coil_labels=field_values[0], receiver_noise_bandwidth=field_values[1], noise_dwell_time_us=field_values[2], sample_count=field_values[3], matrix=field_values[4])
731
+ return NoiseCovariance(coil_labels=field_values[0], receiver_noise_bandwidth=field_values[1], noise_dwell_time_ns=field_values[2], sample_count=field_values[3], matrix=field_values[4])
732
732
 
733
733
 
734
734
  class WaveformSerializer(typing.Generic[T, T_NP], _binary.RecordSerializer[Waveform[T_NP]]):
735
735
  def __init__(self, t_serializer: _binary.TypeSerializer[T, T_NP]) -> None:
736
- 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))])
736
+ super().__init__([("flags", _binary.uint64_serializer), ("measurement_uid", _binary.uint32_serializer), ("scan_counter", _binary.uint32_serializer), ("time_stamp_ns", _binary.uint64_serializer), ("sample_time_ns", _binary.uint64_serializer), ("waveform_id", _binary.uint32_serializer), ("data", _binary.NDArraySerializer(t_serializer, 2))])
737
737
 
738
738
  def write(self, stream: _binary.CodedOutputStream, value: Waveform[T_NP]) -> None:
739
739
  if isinstance(value, np.void):
740
740
  self.write_numpy(stream, value)
741
741
  return
742
- self._write(stream, value.flags, value.measurement_uid, value.scan_counter, value.time_stamp, value.sample_time_us, value.waveform_id, value.data)
742
+ self._write(stream, value.flags, value.measurement_uid, value.scan_counter, value.time_stamp_ns, value.sample_time_ns, value.waveform_id, value.data)
743
743
 
744
744
  def write_numpy(self, stream: _binary.CodedOutputStream, value: np.void) -> None:
745
- self._write(stream, value['flags'], value['measurement_uid'], value['scan_counter'], value['time_stamp'], value['sample_time_us'], value['waveform_id'], value['data'])
745
+ self._write(stream, value['flags'], value['measurement_uid'], value['scan_counter'], value['time_stamp_ns'], value['sample_time_ns'], value['waveform_id'], value['data'])
746
746
 
747
747
  def read(self, stream: _binary.CodedInputStream) -> Waveform[T_NP]:
748
748
  field_values = self._read(stream)
749
- 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])
749
+ return Waveform[T_NP](flags=field_values[0], measurement_uid=field_values[1], scan_counter=field_values[2], time_stamp_ns=field_values[3], sample_time_ns=field_values[4], waveform_id=field_values[5], data=field_values[6])
750
750
 
751
751
 
752
752
  class AcquisitionBucketSerializer(_binary.RecordSerializer[AcquisitionBucket]):
@@ -170,14 +170,14 @@ class AcquisitionHeaderConverter(_ndjson.JsonConverter[AcquisitionHeader, np.voi
170
170
  self._idx_converter = EncodingCountersConverter()
171
171
  self._measurement_uid_converter = _ndjson.uint32_converter
172
172
  self._scan_counter_converter = _ndjson.OptionalConverter(_ndjson.uint32_converter)
173
- self._acquisition_time_stamp_converter = _ndjson.OptionalConverter(_ndjson.uint32_converter)
174
- self._physiology_time_stamp_converter = _ndjson.VectorConverter(_ndjson.uint32_converter)
173
+ self._acquisition_time_stamp_ns_converter = _ndjson.OptionalConverter(_ndjson.uint64_converter)
174
+ self._physiology_time_stamp_ns_converter = _ndjson.VectorConverter(_ndjson.uint64_converter)
175
175
  self._channel_order_converter = _ndjson.VectorConverter(_ndjson.uint32_converter)
176
176
  self._discard_pre_converter = _ndjson.OptionalConverter(_ndjson.uint32_converter)
177
177
  self._discard_post_converter = _ndjson.OptionalConverter(_ndjson.uint32_converter)
178
178
  self._center_sample_converter = _ndjson.OptionalConverter(_ndjson.uint32_converter)
179
179
  self._encoding_space_ref_converter = _ndjson.OptionalConverter(_ndjson.uint32_converter)
180
- self._sample_time_us_converter = _ndjson.OptionalConverter(_ndjson.float32_converter)
180
+ self._sample_time_ns_converter = _ndjson.OptionalConverter(_ndjson.uint64_converter)
181
181
  self._position_converter = _ndjson.FixedNDArrayConverter(_ndjson.float32_converter, (3,))
182
182
  self._read_dir_converter = _ndjson.FixedNDArrayConverter(_ndjson.float32_converter, (3,))
183
183
  self._phase_dir_converter = _ndjson.FixedNDArrayConverter(_ndjson.float32_converter, (3,))
@@ -190,14 +190,14 @@ class AcquisitionHeaderConverter(_ndjson.JsonConverter[AcquisitionHeader, np.voi
190
190
  ("idx", self._idx_converter.overall_dtype()),
191
191
  ("measurement_uid", self._measurement_uid_converter.overall_dtype()),
192
192
  ("scan_counter", self._scan_counter_converter.overall_dtype()),
193
- ("acquisition_time_stamp", self._acquisition_time_stamp_converter.overall_dtype()),
194
- ("physiology_time_stamp", self._physiology_time_stamp_converter.overall_dtype()),
193
+ ("acquisition_time_stamp_ns", self._acquisition_time_stamp_ns_converter.overall_dtype()),
194
+ ("physiology_time_stamp_ns", self._physiology_time_stamp_ns_converter.overall_dtype()),
195
195
  ("channel_order", self._channel_order_converter.overall_dtype()),
196
196
  ("discard_pre", self._discard_pre_converter.overall_dtype()),
197
197
  ("discard_post", self._discard_post_converter.overall_dtype()),
198
198
  ("center_sample", self._center_sample_converter.overall_dtype()),
199
199
  ("encoding_space_ref", self._encoding_space_ref_converter.overall_dtype()),
200
- ("sample_time_us", self._sample_time_us_converter.overall_dtype()),
200
+ ("sample_time_ns", self._sample_time_ns_converter.overall_dtype()),
201
201
  ("position", self._position_converter.overall_dtype()),
202
202
  ("read_dir", self._read_dir_converter.overall_dtype()),
203
203
  ("phase_dir", self._phase_dir_converter.overall_dtype()),
@@ -217,9 +217,9 @@ class AcquisitionHeaderConverter(_ndjson.JsonConverter[AcquisitionHeader, np.voi
217
217
  json_object["measurementUid"] = self._measurement_uid_converter.to_json(value.measurement_uid)
218
218
  if value.scan_counter is not None:
219
219
  json_object["scanCounter"] = self._scan_counter_converter.to_json(value.scan_counter)
220
- if value.acquisition_time_stamp is not None:
221
- json_object["acquisitionTimeStamp"] = self._acquisition_time_stamp_converter.to_json(value.acquisition_time_stamp)
222
- json_object["physiologyTimeStamp"] = self._physiology_time_stamp_converter.to_json(value.physiology_time_stamp)
220
+ if value.acquisition_time_stamp_ns is not None:
221
+ json_object["acquisitionTimeStampNs"] = self._acquisition_time_stamp_ns_converter.to_json(value.acquisition_time_stamp_ns)
222
+ json_object["physiologyTimeStampNs"] = self._physiology_time_stamp_ns_converter.to_json(value.physiology_time_stamp_ns)
223
223
  json_object["channelOrder"] = self._channel_order_converter.to_json(value.channel_order)
224
224
  if value.discard_pre is not None:
225
225
  json_object["discardPre"] = self._discard_pre_converter.to_json(value.discard_pre)
@@ -229,8 +229,8 @@ class AcquisitionHeaderConverter(_ndjson.JsonConverter[AcquisitionHeader, np.voi
229
229
  json_object["centerSample"] = self._center_sample_converter.to_json(value.center_sample)
230
230
  if value.encoding_space_ref is not None:
231
231
  json_object["encodingSpaceRef"] = self._encoding_space_ref_converter.to_json(value.encoding_space_ref)
232
- if value.sample_time_us is not None:
233
- json_object["sampleTimeUs"] = self._sample_time_us_converter.to_json(value.sample_time_us)
232
+ if value.sample_time_ns is not None:
233
+ json_object["sampleTimeNs"] = self._sample_time_ns_converter.to_json(value.sample_time_ns)
234
234
  json_object["position"] = self._position_converter.to_json(value.position)
235
235
  json_object["readDir"] = self._read_dir_converter.to_json(value.read_dir)
236
236
  json_object["phaseDir"] = self._phase_dir_converter.to_json(value.phase_dir)
@@ -250,9 +250,9 @@ class AcquisitionHeaderConverter(_ndjson.JsonConverter[AcquisitionHeader, np.voi
250
250
  json_object["measurementUid"] = self._measurement_uid_converter.numpy_to_json(value["measurement_uid"])
251
251
  if (field_val := value["scan_counter"]) is not None:
252
252
  json_object["scanCounter"] = self._scan_counter_converter.numpy_to_json(field_val)
253
- if (field_val := value["acquisition_time_stamp"]) is not None:
254
- json_object["acquisitionTimeStamp"] = self._acquisition_time_stamp_converter.numpy_to_json(field_val)
255
- json_object["physiologyTimeStamp"] = self._physiology_time_stamp_converter.numpy_to_json(value["physiology_time_stamp"])
253
+ if (field_val := value["acquisition_time_stamp_ns"]) is not None:
254
+ json_object["acquisitionTimeStampNs"] = self._acquisition_time_stamp_ns_converter.numpy_to_json(field_val)
255
+ json_object["physiologyTimeStampNs"] = self._physiology_time_stamp_ns_converter.numpy_to_json(value["physiology_time_stamp_ns"])
256
256
  json_object["channelOrder"] = self._channel_order_converter.numpy_to_json(value["channel_order"])
257
257
  if (field_val := value["discard_pre"]) is not None:
258
258
  json_object["discardPre"] = self._discard_pre_converter.numpy_to_json(field_val)
@@ -262,8 +262,8 @@ class AcquisitionHeaderConverter(_ndjson.JsonConverter[AcquisitionHeader, np.voi
262
262
  json_object["centerSample"] = self._center_sample_converter.numpy_to_json(field_val)
263
263
  if (field_val := value["encoding_space_ref"]) is not None:
264
264
  json_object["encodingSpaceRef"] = self._encoding_space_ref_converter.numpy_to_json(field_val)
265
- if (field_val := value["sample_time_us"]) is not None:
266
- json_object["sampleTimeUs"] = self._sample_time_us_converter.numpy_to_json(field_val)
265
+ if (field_val := value["sample_time_ns"]) is not None:
266
+ json_object["sampleTimeNs"] = self._sample_time_ns_converter.numpy_to_json(field_val)
267
267
  json_object["position"] = self._position_converter.numpy_to_json(value["position"])
268
268
  json_object["readDir"] = self._read_dir_converter.numpy_to_json(value["read_dir"])
269
269
  json_object["phaseDir"] = self._phase_dir_converter.numpy_to_json(value["phase_dir"])
@@ -281,14 +281,14 @@ class AcquisitionHeaderConverter(_ndjson.JsonConverter[AcquisitionHeader, np.voi
281
281
  idx=self._idx_converter.from_json(json_object["idx"],),
282
282
  measurement_uid=self._measurement_uid_converter.from_json(json_object["measurementUid"],),
283
283
  scan_counter=self._scan_counter_converter.from_json(json_object.get("scanCounter")),
284
- acquisition_time_stamp=self._acquisition_time_stamp_converter.from_json(json_object.get("acquisitionTimeStamp")),
285
- physiology_time_stamp=self._physiology_time_stamp_converter.from_json(json_object["physiologyTimeStamp"],),
284
+ acquisition_time_stamp_ns=self._acquisition_time_stamp_ns_converter.from_json(json_object.get("acquisitionTimeStampNs")),
285
+ physiology_time_stamp_ns=self._physiology_time_stamp_ns_converter.from_json(json_object["physiologyTimeStampNs"],),
286
286
  channel_order=self._channel_order_converter.from_json(json_object["channelOrder"],),
287
287
  discard_pre=self._discard_pre_converter.from_json(json_object.get("discardPre")),
288
288
  discard_post=self._discard_post_converter.from_json(json_object.get("discardPost")),
289
289
  center_sample=self._center_sample_converter.from_json(json_object.get("centerSample")),
290
290
  encoding_space_ref=self._encoding_space_ref_converter.from_json(json_object.get("encodingSpaceRef")),
291
- sample_time_us=self._sample_time_us_converter.from_json(json_object.get("sampleTimeUs")),
291
+ sample_time_ns=self._sample_time_ns_converter.from_json(json_object.get("sampleTimeNs")),
292
292
  position=self._position_converter.from_json(json_object["position"],),
293
293
  read_dir=self._read_dir_converter.from_json(json_object["readDir"],),
294
294
  phase_dir=self._phase_dir_converter.from_json(json_object["phaseDir"],),
@@ -306,14 +306,14 @@ class AcquisitionHeaderConverter(_ndjson.JsonConverter[AcquisitionHeader, np.voi
306
306
  self._idx_converter.from_json_to_numpy(json_object["idx"]),
307
307
  self._measurement_uid_converter.from_json_to_numpy(json_object["measurementUid"]),
308
308
  self._scan_counter_converter.from_json_to_numpy(json_object.get("scanCounter")),
309
- self._acquisition_time_stamp_converter.from_json_to_numpy(json_object.get("acquisitionTimeStamp")),
310
- self._physiology_time_stamp_converter.from_json_to_numpy(json_object["physiologyTimeStamp"]),
309
+ self._acquisition_time_stamp_ns_converter.from_json_to_numpy(json_object.get("acquisitionTimeStampNs")),
310
+ self._physiology_time_stamp_ns_converter.from_json_to_numpy(json_object["physiologyTimeStampNs"]),
311
311
  self._channel_order_converter.from_json_to_numpy(json_object["channelOrder"]),
312
312
  self._discard_pre_converter.from_json_to_numpy(json_object.get("discardPre")),
313
313
  self._discard_post_converter.from_json_to_numpy(json_object.get("discardPost")),
314
314
  self._center_sample_converter.from_json_to_numpy(json_object.get("centerSample")),
315
315
  self._encoding_space_ref_converter.from_json_to_numpy(json_object.get("encodingSpaceRef")),
316
- self._sample_time_us_converter.from_json_to_numpy(json_object.get("sampleTimeUs")),
316
+ self._sample_time_ns_converter.from_json_to_numpy(json_object.get("sampleTimeNs")),
317
317
  self._position_converter.from_json_to_numpy(json_object["position"]),
318
318
  self._read_dir_converter.from_json_to_numpy(json_object["readDir"]),
319
319
  self._phase_dir_converter.from_json_to_numpy(json_object["phaseDir"]),
@@ -2425,8 +2425,8 @@ class ImageHeaderConverter(_ndjson.JsonConverter[ImageHeader, np.void]):
2425
2425
  self._phase_converter = _ndjson.OptionalConverter(_ndjson.uint32_converter)
2426
2426
  self._repetition_converter = _ndjson.OptionalConverter(_ndjson.uint32_converter)
2427
2427
  self._set_converter = _ndjson.OptionalConverter(_ndjson.uint32_converter)
2428
- self._acquisition_time_stamp_converter = _ndjson.OptionalConverter(_ndjson.uint32_converter)
2429
- self._physiology_time_stamp_converter = _ndjson.VectorConverter(_ndjson.uint32_converter)
2428
+ self._acquisition_time_stamp_ns_converter = _ndjson.OptionalConverter(_ndjson.uint64_converter)
2429
+ self._physiology_time_stamp_ns_converter = _ndjson.VectorConverter(_ndjson.uint64_converter)
2430
2430
  self._image_type_converter = _ndjson.EnumConverter(ImageType, np.int32, image_type_name_to_value_map, image_type_value_to_name_map)
2431
2431
  self._image_index_converter = _ndjson.OptionalConverter(_ndjson.uint32_converter)
2432
2432
  self._image_series_index_converter = _ndjson.OptionalConverter(_ndjson.uint32_converter)
@@ -2447,8 +2447,8 @@ class ImageHeaderConverter(_ndjson.JsonConverter[ImageHeader, np.void]):
2447
2447
  ("phase", self._phase_converter.overall_dtype()),
2448
2448
  ("repetition", self._repetition_converter.overall_dtype()),
2449
2449
  ("set", self._set_converter.overall_dtype()),
2450
- ("acquisition_time_stamp", self._acquisition_time_stamp_converter.overall_dtype()),
2451
- ("physiology_time_stamp", self._physiology_time_stamp_converter.overall_dtype()),
2450
+ ("acquisition_time_stamp_ns", self._acquisition_time_stamp_ns_converter.overall_dtype()),
2451
+ ("physiology_time_stamp_ns", self._physiology_time_stamp_ns_converter.overall_dtype()),
2452
2452
  ("image_type", self._image_type_converter.overall_dtype()),
2453
2453
  ("image_index", self._image_index_converter.overall_dtype()),
2454
2454
  ("image_series_index", self._image_series_index_converter.overall_dtype()),
@@ -2481,9 +2481,9 @@ class ImageHeaderConverter(_ndjson.JsonConverter[ImageHeader, np.void]):
2481
2481
  json_object["repetition"] = self._repetition_converter.to_json(value.repetition)
2482
2482
  if value.set is not None:
2483
2483
  json_object["set"] = self._set_converter.to_json(value.set)
2484
- if value.acquisition_time_stamp is not None:
2485
- json_object["acquisitionTimeStamp"] = self._acquisition_time_stamp_converter.to_json(value.acquisition_time_stamp)
2486
- json_object["physiologyTimeStamp"] = self._physiology_time_stamp_converter.to_json(value.physiology_time_stamp)
2484
+ if value.acquisition_time_stamp_ns is not None:
2485
+ json_object["acquisitionTimeStampNs"] = self._acquisition_time_stamp_ns_converter.to_json(value.acquisition_time_stamp_ns)
2486
+ json_object["physiologyTimeStampNs"] = self._physiology_time_stamp_ns_converter.to_json(value.physiology_time_stamp_ns)
2487
2487
  json_object["imageType"] = self._image_type_converter.to_json(value.image_type)
2488
2488
  if value.image_index is not None:
2489
2489
  json_object["imageIndex"] = self._image_index_converter.to_json(value.image_index)
@@ -2518,9 +2518,9 @@ class ImageHeaderConverter(_ndjson.JsonConverter[ImageHeader, np.void]):
2518
2518
  json_object["repetition"] = self._repetition_converter.numpy_to_json(field_val)
2519
2519
  if (field_val := value["set"]) is not None:
2520
2520
  json_object["set"] = self._set_converter.numpy_to_json(field_val)
2521
- if (field_val := value["acquisition_time_stamp"]) is not None:
2522
- json_object["acquisitionTimeStamp"] = self._acquisition_time_stamp_converter.numpy_to_json(field_val)
2523
- json_object["physiologyTimeStamp"] = self._physiology_time_stamp_converter.numpy_to_json(value["physiology_time_stamp"])
2521
+ if (field_val := value["acquisition_time_stamp_ns"]) is not None:
2522
+ json_object["acquisitionTimeStampNs"] = self._acquisition_time_stamp_ns_converter.numpy_to_json(field_val)
2523
+ json_object["physiologyTimeStampNs"] = self._physiology_time_stamp_ns_converter.numpy_to_json(value["physiology_time_stamp_ns"])
2524
2524
  json_object["imageType"] = self._image_type_converter.numpy_to_json(value["image_type"])
2525
2525
  if (field_val := value["image_index"]) is not None:
2526
2526
  json_object["imageIndex"] = self._image_index_converter.numpy_to_json(field_val)
@@ -2548,8 +2548,8 @@ class ImageHeaderConverter(_ndjson.JsonConverter[ImageHeader, np.void]):
2548
2548
  phase=self._phase_converter.from_json(json_object.get("phase")),
2549
2549
  repetition=self._repetition_converter.from_json(json_object.get("repetition")),
2550
2550
  set=self._set_converter.from_json(json_object.get("set")),
2551
- acquisition_time_stamp=self._acquisition_time_stamp_converter.from_json(json_object.get("acquisitionTimeStamp")),
2552
- physiology_time_stamp=self._physiology_time_stamp_converter.from_json(json_object["physiologyTimeStamp"],),
2551
+ acquisition_time_stamp_ns=self._acquisition_time_stamp_ns_converter.from_json(json_object.get("acquisitionTimeStampNs")),
2552
+ physiology_time_stamp_ns=self._physiology_time_stamp_ns_converter.from_json(json_object["physiologyTimeStampNs"],),
2553
2553
  image_type=self._image_type_converter.from_json(json_object["imageType"],),
2554
2554
  image_index=self._image_index_converter.from_json(json_object.get("imageIndex")),
2555
2555
  image_series_index=self._image_series_index_converter.from_json(json_object.get("imageSeriesIndex")),
@@ -2575,8 +2575,8 @@ class ImageHeaderConverter(_ndjson.JsonConverter[ImageHeader, np.void]):
2575
2575
  self._phase_converter.from_json_to_numpy(json_object.get("phase")),
2576
2576
  self._repetition_converter.from_json_to_numpy(json_object.get("repetition")),
2577
2577
  self._set_converter.from_json_to_numpy(json_object.get("set")),
2578
- self._acquisition_time_stamp_converter.from_json_to_numpy(json_object.get("acquisitionTimeStamp")),
2579
- self._physiology_time_stamp_converter.from_json_to_numpy(json_object["physiologyTimeStamp"]),
2578
+ self._acquisition_time_stamp_ns_converter.from_json_to_numpy(json_object.get("acquisitionTimeStampNs")),
2579
+ self._physiology_time_stamp_ns_converter.from_json_to_numpy(json_object["physiologyTimeStampNs"]),
2580
2580
  self._image_type_converter.from_json_to_numpy(json_object["imageType"]),
2581
2581
  self._image_index_converter.from_json_to_numpy(json_object.get("imageIndex")),
2582
2582
  self._image_series_index_converter.from_json_to_numpy(json_object.get("imageSeriesIndex")),
@@ -2639,13 +2639,13 @@ class NoiseCovarianceConverter(_ndjson.JsonConverter[NoiseCovariance, np.void]):
2639
2639
  def __init__(self) -> None:
2640
2640
  self._coil_labels_converter = _ndjson.VectorConverter(CoilLabelTypeConverter())
2641
2641
  self._receiver_noise_bandwidth_converter = _ndjson.float32_converter
2642
- self._noise_dwell_time_us_converter = _ndjson.float32_converter
2642
+ self._noise_dwell_time_ns_converter = _ndjson.uint64_converter
2643
2643
  self._sample_count_converter = _ndjson.size_converter
2644
2644
  self._matrix_converter = _ndjson.NDArrayConverter(_ndjson.complexfloat32_converter, 2)
2645
2645
  super().__init__(np.dtype([
2646
2646
  ("coil_labels", self._coil_labels_converter.overall_dtype()),
2647
2647
  ("receiver_noise_bandwidth", self._receiver_noise_bandwidth_converter.overall_dtype()),
2648
- ("noise_dwell_time_us", self._noise_dwell_time_us_converter.overall_dtype()),
2648
+ ("noise_dwell_time_ns", self._noise_dwell_time_ns_converter.overall_dtype()),
2649
2649
  ("sample_count", self._sample_count_converter.overall_dtype()),
2650
2650
  ("matrix", self._matrix_converter.overall_dtype()),
2651
2651
  ]))
@@ -2657,7 +2657,7 @@ class NoiseCovarianceConverter(_ndjson.JsonConverter[NoiseCovariance, np.void]):
2657
2657
 
2658
2658
  json_object["coilLabels"] = self._coil_labels_converter.to_json(value.coil_labels)
2659
2659
  json_object["receiverNoiseBandwidth"] = self._receiver_noise_bandwidth_converter.to_json(value.receiver_noise_bandwidth)
2660
- json_object["noiseDwellTimeUs"] = self._noise_dwell_time_us_converter.to_json(value.noise_dwell_time_us)
2660
+ json_object["noiseDwellTimeNs"] = self._noise_dwell_time_ns_converter.to_json(value.noise_dwell_time_ns)
2661
2661
  json_object["sampleCount"] = self._sample_count_converter.to_json(value.sample_count)
2662
2662
  json_object["matrix"] = self._matrix_converter.to_json(value.matrix)
2663
2663
  return json_object
@@ -2669,7 +2669,7 @@ class NoiseCovarianceConverter(_ndjson.JsonConverter[NoiseCovariance, np.void]):
2669
2669
 
2670
2670
  json_object["coilLabels"] = self._coil_labels_converter.numpy_to_json(value["coil_labels"])
2671
2671
  json_object["receiverNoiseBandwidth"] = self._receiver_noise_bandwidth_converter.numpy_to_json(value["receiver_noise_bandwidth"])
2672
- json_object["noiseDwellTimeUs"] = self._noise_dwell_time_us_converter.numpy_to_json(value["noise_dwell_time_us"])
2672
+ json_object["noiseDwellTimeNs"] = self._noise_dwell_time_ns_converter.numpy_to_json(value["noise_dwell_time_ns"])
2673
2673
  json_object["sampleCount"] = self._sample_count_converter.numpy_to_json(value["sample_count"])
2674
2674
  json_object["matrix"] = self._matrix_converter.numpy_to_json(value["matrix"])
2675
2675
  return json_object
@@ -2680,7 +2680,7 @@ class NoiseCovarianceConverter(_ndjson.JsonConverter[NoiseCovariance, np.void]):
2680
2680
  return NoiseCovariance(
2681
2681
  coil_labels=self._coil_labels_converter.from_json(json_object["coilLabels"],),
2682
2682
  receiver_noise_bandwidth=self._receiver_noise_bandwidth_converter.from_json(json_object["receiverNoiseBandwidth"],),
2683
- noise_dwell_time_us=self._noise_dwell_time_us_converter.from_json(json_object["noiseDwellTimeUs"],),
2683
+ noise_dwell_time_ns=self._noise_dwell_time_ns_converter.from_json(json_object["noiseDwellTimeNs"],),
2684
2684
  sample_count=self._sample_count_converter.from_json(json_object["sampleCount"],),
2685
2685
  matrix=self._matrix_converter.from_json(json_object["matrix"],),
2686
2686
  )
@@ -2691,7 +2691,7 @@ class NoiseCovarianceConverter(_ndjson.JsonConverter[NoiseCovariance, np.void]):
2691
2691
  return (
2692
2692
  self._coil_labels_converter.from_json_to_numpy(json_object["coilLabels"]),
2693
2693
  self._receiver_noise_bandwidth_converter.from_json_to_numpy(json_object["receiverNoiseBandwidth"]),
2694
- self._noise_dwell_time_us_converter.from_json_to_numpy(json_object["noiseDwellTimeUs"]),
2694
+ self._noise_dwell_time_ns_converter.from_json_to_numpy(json_object["noiseDwellTimeNs"]),
2695
2695
  self._sample_count_converter.from_json_to_numpy(json_object["sampleCount"]),
2696
2696
  self._matrix_converter.from_json_to_numpy(json_object["matrix"]),
2697
2697
  ) # type:ignore
@@ -2702,16 +2702,16 @@ class WaveformConverter(typing.Generic[T, T_NP], _ndjson.JsonConverter[Waveform[
2702
2702
  self._flags_converter = _ndjson.uint64_converter
2703
2703
  self._measurement_uid_converter = _ndjson.uint32_converter
2704
2704
  self._scan_counter_converter = _ndjson.uint32_converter
2705
- self._time_stamp_converter = _ndjson.uint32_converter
2706
- self._sample_time_us_converter = _ndjson.float32_converter
2705
+ self._time_stamp_ns_converter = _ndjson.uint64_converter
2706
+ self._sample_time_ns_converter = _ndjson.uint64_converter
2707
2707
  self._waveform_id_converter = _ndjson.uint32_converter
2708
2708
  self._data_converter = _ndjson.NDArrayConverter(t_converter, 2)
2709
2709
  super().__init__(np.dtype([
2710
2710
  ("flags", self._flags_converter.overall_dtype()),
2711
2711
  ("measurement_uid", self._measurement_uid_converter.overall_dtype()),
2712
2712
  ("scan_counter", self._scan_counter_converter.overall_dtype()),
2713
- ("time_stamp", self._time_stamp_converter.overall_dtype()),
2714
- ("sample_time_us", self._sample_time_us_converter.overall_dtype()),
2713
+ ("time_stamp_ns", self._time_stamp_ns_converter.overall_dtype()),
2714
+ ("sample_time_ns", self._sample_time_ns_converter.overall_dtype()),
2715
2715
  ("waveform_id", self._waveform_id_converter.overall_dtype()),
2716
2716
  ("data", self._data_converter.overall_dtype()),
2717
2717
  ]))
@@ -2724,8 +2724,8 @@ class WaveformConverter(typing.Generic[T, T_NP], _ndjson.JsonConverter[Waveform[
2724
2724
  json_object["flags"] = self._flags_converter.to_json(value.flags)
2725
2725
  json_object["measurementUid"] = self._measurement_uid_converter.to_json(value.measurement_uid)
2726
2726
  json_object["scanCounter"] = self._scan_counter_converter.to_json(value.scan_counter)
2727
- json_object["timeStamp"] = self._time_stamp_converter.to_json(value.time_stamp)
2728
- json_object["sampleTimeUs"] = self._sample_time_us_converter.to_json(value.sample_time_us)
2727
+ json_object["timeStampNs"] = self._time_stamp_ns_converter.to_json(value.time_stamp_ns)
2728
+ json_object["sampleTimeNs"] = self._sample_time_ns_converter.to_json(value.sample_time_ns)
2729
2729
  json_object["waveformId"] = self._waveform_id_converter.to_json(value.waveform_id)
2730
2730
  json_object["data"] = self._data_converter.to_json(value.data)
2731
2731
  return json_object
@@ -2738,8 +2738,8 @@ class WaveformConverter(typing.Generic[T, T_NP], _ndjson.JsonConverter[Waveform[
2738
2738
  json_object["flags"] = self._flags_converter.numpy_to_json(value["flags"])
2739
2739
  json_object["measurementUid"] = self._measurement_uid_converter.numpy_to_json(value["measurement_uid"])
2740
2740
  json_object["scanCounter"] = self._scan_counter_converter.numpy_to_json(value["scan_counter"])
2741
- json_object["timeStamp"] = self._time_stamp_converter.numpy_to_json(value["time_stamp"])
2742
- json_object["sampleTimeUs"] = self._sample_time_us_converter.numpy_to_json(value["sample_time_us"])
2741
+ json_object["timeStampNs"] = self._time_stamp_ns_converter.numpy_to_json(value["time_stamp_ns"])
2742
+ json_object["sampleTimeNs"] = self._sample_time_ns_converter.numpy_to_json(value["sample_time_ns"])
2743
2743
  json_object["waveformId"] = self._waveform_id_converter.numpy_to_json(value["waveform_id"])
2744
2744
  json_object["data"] = self._data_converter.numpy_to_json(value["data"])
2745
2745
  return json_object
@@ -2751,8 +2751,8 @@ class WaveformConverter(typing.Generic[T, T_NP], _ndjson.JsonConverter[Waveform[
2751
2751
  flags=self._flags_converter.from_json(json_object["flags"],),
2752
2752
  measurement_uid=self._measurement_uid_converter.from_json(json_object["measurementUid"],),
2753
2753
  scan_counter=self._scan_counter_converter.from_json(json_object["scanCounter"],),
2754
- time_stamp=self._time_stamp_converter.from_json(json_object["timeStamp"],),
2755
- sample_time_us=self._sample_time_us_converter.from_json(json_object["sampleTimeUs"],),
2754
+ time_stamp_ns=self._time_stamp_ns_converter.from_json(json_object["timeStampNs"],),
2755
+ sample_time_ns=self._sample_time_ns_converter.from_json(json_object["sampleTimeNs"],),
2756
2756
  waveform_id=self._waveform_id_converter.from_json(json_object["waveformId"],),
2757
2757
  data=self._data_converter.from_json(json_object["data"],),
2758
2758
  )
@@ -2764,8 +2764,8 @@ class WaveformConverter(typing.Generic[T, T_NP], _ndjson.JsonConverter[Waveform[
2764
2764
  self._flags_converter.from_json_to_numpy(json_object["flags"]),
2765
2765
  self._measurement_uid_converter.from_json_to_numpy(json_object["measurementUid"]),
2766
2766
  self._scan_counter_converter.from_json_to_numpy(json_object["scanCounter"]),
2767
- self._time_stamp_converter.from_json_to_numpy(json_object["timeStamp"]),
2768
- self._sample_time_us_converter.from_json_to_numpy(json_object["sampleTimeUs"]),
2767
+ self._time_stamp_ns_converter.from_json_to_numpy(json_object["timeStampNs"]),
2768
+ self._sample_time_ns_converter.from_json_to_numpy(json_object["sampleTimeNs"]),
2769
2769
  self._waveform_id_converter.from_json_to_numpy(json_object["waveformId"]),
2770
2770
  self._data_converter.from_json_to_numpy(json_object["data"]),
2771
2771
  ) # type:ignore
@@ -3179,8 +3179,8 @@ class NDJsonMrdReader(_ndjson.NDJsonProtocolReader, MrdReaderBase):
3179
3179
  """
3180
3180
 
3181
3181
 
3182
- def __init__(self, stream: typing.Union[io.BufferedReader, typing.TextIO, str]) -> None:
3183
- MrdReaderBase.__init__(self)
3182
+ def __init__(self, stream: typing.Union[io.BufferedReader, typing.TextIO, str], skip_completed_check: bool = False) -> None:
3183
+ MrdReaderBase.__init__(self, skip_completed_check)
3184
3184
  _ndjson.NDJsonProtocolReader.__init__(self, stream, MrdReaderBase.schema)
3185
3185
 
3186
3186
  def _read_header(self) -> typing.Optional[Header]:
@@ -3217,8 +3217,8 @@ class NDJsonMrdNoiseCovarianceReader(_ndjson.NDJsonProtocolReader, MrdNoiseCovar
3217
3217
  """
3218
3218
 
3219
3219
 
3220
- def __init__(self, stream: typing.Union[io.BufferedReader, typing.TextIO, str]) -> None:
3221
- MrdNoiseCovarianceReaderBase.__init__(self)
3220
+ def __init__(self, stream: typing.Union[io.BufferedReader, typing.TextIO, str], skip_completed_check: bool = False) -> None:
3221
+ MrdNoiseCovarianceReaderBase.__init__(self, skip_completed_check)
3222
3222
  _ndjson.NDJsonProtocolReader.__init__(self, stream, MrdNoiseCovarianceReaderBase.schema)
3223
3223
 
3224
3224
  def _read_noise_covariance(self) -> NoiseCovariance: