Skip to content

Commit 8442f64

Browse files
committed
strugling with the conversion and metadata
1 parent 3e171b7 commit 8442f64

File tree

1 file changed

+30
-3
lines changed

1 file changed

+30
-3
lines changed

src/asammdf/signal.py

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,34 @@ def convert(arr, ignore_value2text_conversions=False):
7070
return res
7171

7272

73+
def replace_metadata(dtype, name, attribute, value, current_name=""):
74+
if dtype.fields:
75+
new_dt = {
76+
'names': [],
77+
'formats': [],
78+
'offsets': [],
79+
}
80+
for fname, (dt, offset, *_) in dtype.fields.items():
81+
new_dt['names'].append(fname)
82+
new_dt['offsets'].append(offset)
83+
new_dt['formats'].append(
84+
replace_metadata(dt, name, attribute, value, fname)
85+
)
86+
87+
if old_metadata := (dtype.metadata or dtype.base.metadata):
88+
return np.dtype(new_dt, metadata=dict(old_metadata))
89+
else:
90+
return np.dtype(new_dt)
91+
92+
else:
93+
if current_name and current_name != name:
94+
return dtype
95+
else:
96+
metadata = dict(dtype.metadata or dtype.base.metadata or {})
97+
metadata[attribute] = value
98+
return np.dtype(np.lib.format.drop_metadata(dtype), metadata=metadata)
99+
100+
73101
class InvalidationArray(np.ndarray[tuple[int], np.dtype[np.bool]]):
74102
ORIGIN_UNKNOWN = ORIGIN_UNKNOWN
75103

@@ -258,10 +286,9 @@ def conversion(self):
258286

259287
@conversion.setter
260288
def conversion(self, conv):
261-
metadata = dict(self.samples.dtype.metadata or self.samples.dtype.base.metadata or {})
262-
metadata['conversion'] = conv
263289
self.samples = self.samples.view(
264-
dtype=np.dtype(np.lib.format.drop_metadata(self.samples.dtype), metadata=metadata))
290+
replace_metadata(self.samples.dtype, self.name, "conversion", conv)
291+
)
265292

266293
@property
267294
def invalidation_bits(self) -> InvalidationArray | None:

0 commit comments

Comments
 (0)