Skip to content

CI Failures--Wrong Python Version + NWB failures #1618

@zm711

Description

@zm711

Describe the bug
Our python 3.12 test is currently running on 3.9. I need to try to fix this. I'll have to look into this today or tomorrow.

The main issue is the following:

self = <neo.test.iotest.test_nwbio.TestNWBIO testMethod=test_roundtrip>

    def test_roundtrip(self):
    
        annotations = {"session_start_time": datetime.now()}
        # Define Neo blocks
        bl0 = Block(name="First block", **annotations)
        bl1 = Block(name="Second block", **annotations)
        bl2 = Block(name="Third block", **annotations)
        original_blocks = [bl0, bl1, bl2]
    
        num_seg = 4  # number of segments
        num_chan = 3  # number of channels
    
        for blk in original_blocks:
    
            for ind in range(num_seg):  # number of Segments
                seg = Segment(index=ind)
                blk.segments.append(seg)
    
            for seg in blk.segments:  # AnalogSignal objects
    
                # 3 Neo AnalogSignals
                a = AnalogSignal(
                    name="Signal_a %s" % (seg.name),
                    signal=np.random.randn(44, num_chan) * pq.nA,
                    sampling_rate=10 * pq.kHz,
                    t_start=50 * pq.ms,
                )
                b = AnalogSignal(
                    name="Signal_b %s" % (seg.name),
                    signal=np.random.randn(64, num_chan) * pq.mV,
                    sampling_rate=8 * pq.kHz,
                    t_start=40 * pq.ms,
                )
                c = AnalogSignal(
                    name="Signal_c %s" % (seg.name),
                    signal=np.random.randn(33, num_chan) * pq.uA,
                    sampling_rate=10 * pq.kHz,
                    t_start=120 * pq.ms,
                )
                # 2 Neo IrregularlySampledSignals
                d = IrregularlySampledSignal(np.arange(7.0) * pq.ms, np.random.randn(7, num_chan) * pq.mV)
    
                # 2 Neo SpikeTrains
                train = SpikeTrain(times=[1, 2, 3] * pq.s, t_start=1.0, t_stop=10.0)
                train2 = SpikeTrain(times=[4, 5, 6] * pq.s, t_stop=10.0)
                # todo: add waveforms
    
                # 1 Neo Event
                evt = Event(name="Event", times=np.arange(0, 30, 10) * pq.ms, labels=np.array(["ev0", "ev1", "ev2"]))
    
                # 2 Neo Epochs
                epc = Epoch(
                    times=np.arange(0, 30, 10) * pq.s,
                    durations=[10, 5, 7] * pq.ms,
                    labels=np.array(["btn0", "btn1", "btn2"]),
                )
    
                epc2 = Epoch(
                    times=np.arange(10, 40, 10) * pq.s,
                    durations=[9, 3, 8] * pq.ms,
                    labels=np.array(["btn3", "btn4", "btn5"]),
                )
    
                seg.spiketrains.append(train)
                seg.spiketrains.append(train2)
    
                seg.epochs.append(epc)
                seg.epochs.append(epc2)
    
                seg.analogsignals.append(a)
                seg.analogsignals.append(b)
                seg.analogsignals.append(c)
                seg.irregularlysampledsignals.append(d)
                seg.events.append(evt)
    
        # write to file
        test_file_name = "test_round_trip.nwb"
        iow = NWBIO(filename=test_file_name, mode="w")
>       iow.write_all_blocks(original_blocks)

neo/test/iotest/test_nwbio.py:120: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
neo/io/nwbio.py:458: in write_all_blocks
    self._write_block(block)
neo/io/nwbio.py:499: in _write_block
    self._write_segment(self._nwbfile, segment, electrodes)
neo/io/nwbio.py:533: in _write_segment
    self._write_signal(self._nwbfile, signal, electrodes)
neo/io/nwbio.py:588: in _write_signal
    tS = timeseries_class(
/usr/share/miniconda/envs/neo-test-env/lib/python3.9/site-packages/hdmf/utils.py:668: in func_call
    return func(args[0], **pargs)
/usr/share/miniconda/envs/neo-test-env/lib/python3.9/site-packages/pynwb/base.py:164: in __init__
    super().__init__(**kwargs)
/usr/share/miniconda/envs/neo-test-env/lib/python3.9/site-packages/hdmf/utils.py:668: in func_call
    return func(args[0], **pargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <[AttributeError("'TimeSeries' object has no attribute '_AbstractContainer__name'") raised in repr()] TimeSeries object at 0x7f032efad6a0>
kwargs = {'name': 'First block : segment0 Signal_a None 0'}
name = 'First block : segment0 Signal_a None 0'

    @docval({'name': 'name', 'type': str, 'doc': 'the name of this container'})
    def __init__(self, **kwargs):
        name = getargs('name', kwargs)
        if ('/' in name or ':' in name) and not self._in_construct_mode:
>           raise ValueError(f"name '{name}' cannot contain a '/' or ':'")
E           ValueError: name 'First block : segment0 Signal_a None 0' cannot contain a '/' or ':'

Expected behaviour
Update our parsing if we need to :)

Environment:

  • OS: Linux
  • Python version: 3.9, but should be 3.12
  • Neo version: dev version
  • NumPy version: 1.26

Additional context
Based on the stack trace it seems maybe an issue with hmdf changing some parsing. Any ideas @apdavison?

Here is a testing log to check: https://github.com/NeuralEnsemble/python-neo/actions/runs/12633123694/job/35198115175?pr=1617

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions