danielhrisca / asammdf

Fast Python reader and editor for ASAM MDF / MF4 (Measurement Data Format) files
GNU Lesser General Public License v3.0
611 stars 216 forks source link

MDF.extend() is broken by save() #1043

Open DT-one opened 5 days ago

DT-one commented 5 days ago

Python version

env 1

('python=3.11.3 | packaged by Anaconda, Inc. | (main, Apr 19 2023, 23:46:34) '
 '[MSC v.1916 64 bit (AMD64)]')
'os=Windows-10-10.0.19045-SP0'
'numpy=1.24.3'
'asammdf=7.3.15.dev17'

env 2

'python=3.9.19 (main, Mar 21 2024, 17:21:27) [MSC v.1916 64 bit (AMD64)]'
'os=Windows-10-10.0.19045-SP0'
'numpy=1.24.4'
'asammdf=7.4.1'

Code

MDF version

4.10

Code snippet

This works

import numpy as np
from asammdf import Signal, MDF

# case 1 conversion type None
s1 = np.array([1, 2, 3, 4, 5])
s2 = np.array([-1, -2, -3, -4, -5])
s3 = np.array([0.1, 0.04, 0.09, 0.16, 0.25])
t = np.array([0.001, 0.002, 0.003, 0.004, 0.005])
names = ['Positive', 'Negative', 'Float']
units = ['+', '-', '.f']
s1 = Signal(samples=s1, timestamps=t, unit='+', name='Positive')
s2 = Signal(samples=s2, timestamps=t, unit='-', name='Negative')
s3 = Signal(samples=s3, timestamps=t, unit='flts', name='Floats')
mdf = MDF(version=4.10)
mdf.append([s1, s2, s3], comment='created by asammdf v1.1.0')
print(mdf.name)
mdf.save('test.mf4',overwrite=True)
print(mdf.name)
# mdf = MDF('test.mf4')
# print(mdf.name)
t = np.array([0.006, 0.007, 0.008, 0.009, 0.010])
mdf.extend(0, [(t, None), (s1.samples, None), (s2.samples, None), (s3.samples, None)])
mdf.save('concatenated.mf4',overwrite=True)
mdf.close()

This code doesn't work

import numpy as np
from asammdf import Signal, MDF

# case 1 conversion type None
s1 = np.array([1, 2, 3, 4, 5])
s2 = np.array([-1, -2, -3, -4, -5])
s3 = np.array([0.1, 0.04, 0.09, 0.16, 0.25])
t = np.array([0.001, 0.002, 0.003, 0.004, 0.005])
names = ['Positive', 'Negative', 'Float']
units = ['+', '-', '.f']
s1 = Signal(samples=s1, timestamps=t, unit='+', name='Positive')
s2 = Signal(samples=s2, timestamps=t, unit='-', name='Negative')
s3 = Signal(samples=s3, timestamps=t, unit='flts', name='Floats')
mdf = MDF(version=4.10)
mdf.append([s1, s2, s3], comment='created by asammdf v1.1.0')
print(mdf.name)
mdf.save('test.mf4',overwrite=True)
print(mdf.name)
mdf = MDF('test.mf4')
print(mdf.name)
t = np.array([0.006, 0.007, 0.008, 0.009, 0.010])
mdf.extend(0, [(t, None), (s1.samples, None), (s2.samples, None), (s3.samples, None)])
mdf.save('concatenated.mf4',overwrite=True)
mdf.close()

Traceback

env 1

Traceback (most recent call last):

  File C:\ProgramData\anaconda3\Lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec
    exec(code, globals, locals)

  File c:\\untitled9.py:26
    mdf.extend(0, [(t, None), (s1.samples, None), (s2.samples, None), (s3.samples, None)])

  File C:\ProgramData\anaconda3\Lib\site-packages\asammdf\blocks\mdf_v4.py:5619 in extend
    for i, ((signal, invalidation_bits), sig_type) in enumerate(zip(signals, gp.signal_types)):

AttributeError: 'Group' object has no attribute 'signal_types'

env 2

Traceback (most recent call last):
  File "c:\\untitled9.py", line 22, in <module>
    mdf.extend(0, [(t, None), (s1.samples, None), (s2.samples, None), (s3.samples, None)])
  File "C:\Users\.conda\envs\py39\lib\site-packages\asammdf\blocks\mdf_v4.py", line 5630, in extend
    for i, ((signal, invalidation_bits), sig_type) in enumerate(zip(signals, gp.signal_types)):
AttributeError: signal_types

Description

While trying to work around the broken behavior of concatenate(), I have discovered more broken functionality. When trying to extend a channel group in an MDF object that originates from a saved file, it appears that something isn't populated.

Attached is a modified version of the example given in the documentation

joshiji commented 2 days ago

I too am facing this. What is right way to add a new signal sample to an existing file?