-
Notifications
You must be signed in to change notification settings - Fork 266
Closed
Description
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
Reactions are currently unavailable