-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
FIX, CNT: Use a more robust event_table_pos && n_bytes inference #6550
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
Test I've done for some private files I've been gathering for debug purposes: import os.path as op
import numpy as np
import pytest
from mne import __file__ as _mne_file
from mne.utils import run_tests_if_main
from mne.io.cnt import read_raw_cnt
from mne.io.cnt._utils import CNTEventType1, CNTEventType2, CNTEventType3
def foo(fname):
SETUP_NCHANNELS_OFFSET = 370
SETUP_NSAMPLES_OFFSET = 864
SETUP_EVENTTABLEPOS_OFFSET = 886
def _compute(xx):
return (900 + 75 * int(n_channels) +
xx * int(n_channels) * int(n_samples))
with open(fname, 'rb') as fid:
fid.seek(SETUP_NSAMPLES_OFFSET)
(n_samples,) = np.frombuffer(fid.read(4), dtype='<i4')
fid.seek(SETUP_NCHANNELS_OFFSET)
(n_channels,) = np.frombuffer(fid.read(2), dtype='<u2')
fid.seek(SETUP_EVENTTABLEPOS_OFFSET)
(readed_event_table_pos,) = np.frombuffer(fid.read(4), dtype='<i4')
print('readed_event_table_pos: ', readed_event_table_pos)
print('readed b:', np.binary_repr(readed_event_table_pos, width=40))
print('readed_ b:', np.binary_repr(readed_event_table_pos, width=40))
print('compute(2) b:', np.binary_repr(_compute(2), width=40))
print('compute(4) b:', np.binary_repr(_compute(4), width=40))
print('compute(2) :', _compute(2))
print('compute(4) :', _compute(4))
readed_event_table_pos_feature = np.binary_repr(
readed_event_table_pos).lstrip('-')
for n_bytes_candidate in [2, 4]:
computed_event_table_pos = _compute(n_bytes_candidate)
if (
np.binary_repr(computed_event_table_pos)
.endswith(readed_event_table_pos_feature)
):
n_bytes = n_bytes_candidate
event_table_pos = computed_event_table_pos
print('match found: (', 'n_bytes: ', n_bytes,
'event_table_pos: ', computed_event_table_pos, ')')
break
else:
n_bytes, event_table_pos = None, None
if event_table_pos is None:
print('No match')
return n_channels, n_samples, event_table_pos, n_bytes
pp = pytest.param
@pytest.mark.parametrize((
'fname,expected_n_bytes,expected_event_type,expected_event_table_pos'), [
pp(op.join(op.dirname(_mne_file),
'../sandbox/data/914flankers.cnt'),
4, CNTEventType2, 156474479),
pp(op.join(op.dirname(_mne_file),
'../sandbox/data/confidential/cnt/cont_68chan_32bit.cnt'),
4, CNTEventType2, 57267440),
pp(op.join(op.dirname(_mne_file),
'../sandbox/data/confidential/cnt/'
'pilote_resting_01_neurospin_2019-03-04_15-18-40.cnt'),
2, CNTEventType2, 15518747),
pp(op.join(op.dirname(_mne_file),
'../sandbox/data/confidential/cnt/'
'cont_22chan_4gb_32bit_toolong.cnt'),
4, CNTEventType3, 4971618850),
pp(op.join(op.dirname(_mne_file),
'../sandbox/data/confidential/cnt/SampleCNTFile_16bit.cnt'),
2, CNTEventType2, 133700),
pp(op.join(op.dirname(_mne_file),
'../sandbox/data/confidential/cnt/cnt_files/'
'SampleCNTFile_16bit.cnt'),
2, CNTEventType2, 133700),
pp(op.join(op.dirname(_mne_file),
'../sandbox/data/confidential/cnt/cnt_files/'
'BoyoAEpic1_16bit.cnt'),
2, CNTEventType2, 78536260),
pp(op.join(op.dirname(_mne_file),
'../sandbox/data/confidential/cnt/cnt_files/'
'cont_67chan_resp_32bit.cnt'),
4, CNTEventType2, 54570725),
pp(op.join(op.dirname(_mne_file),
'../sandbox/data/confidential/cnt/BoyoAEpic1_16bit.cnt'),
2, CNTEventType2, 78536260),
pp(op.join(op.dirname(_mne_file),
'../sandbox/data/confidential/cnt/cont_67chan_resp_32bit.cnt'),
4, CNTEventType2, 54570725),
], ids=[str(n) for n in range(10)]
)
def test_foo(fname, expected_n_bytes, expected_event_type,
expected_event_table_pos):
"""Test reading raw cnt files."""
print('\n')
print('expected_n_bytes: ', expected_n_bytes)
print('expected_event_table_pos: ', expected_event_table_pos)
n_channels, n_samples, event_table_pos, n_bytes = foo(fname)
assert Truetrace: rootdir: /home/sik/code/mne-python, inifile: setup.cfg
plugins: timeout-1.3.3, sugar-0.9.2, pudb-0.7.0, mock-1.10.3, faulthandler-1.5.0, cov-2.6.1
collecting ...
expected_n_bytes: 4
expected_event_table_pos: 156474479
readed_event_table_pos: 156474479
readed b: 0000000000001001010100111001110001101111
readed_ b: 0000000000001001010100111001110001101111
compute(2) b: 0000000000000100101001110011110011100101
compute(4) b: 0000000000001001010011100110001010100101
compute(2) : 78068965
compute(4) : 156132005
No match
sandbox/mwe/6535_test_cnt.py ✓ 10% █
expected_n_bytes: 4
expected_event_table_pos: 57267440
readed_event_table_pos: 57267440
readed b: 0000000000000011011010011101010011110000
readed_ b: 0000000000000011011010011101010011110000
compute(2) b: 0000000000000001101101001111011000110000
compute(4) b: 0000000000000011011010011101010011110000
compute(2) : 28636720
compute(4) : 57267440
match found: ( n_bytes: 4 event_table_pos: 57267440 )
sandbox/mwe/6535_test_cnt.py ✓✓ 20% ██
expected_n_bytes: 2
expected_event_table_pos: 15518747
readed_event_table_pos: 15518747
readed b: 0000000000000000111011001100110000011011
readed_ b: 0000000000000000111011001100110000011011
compute(2) b: 0000000000000000000000000101000100111011
compute(4) b: 0000000000000000000000001001100000110101
compute(2) : 20795
compute(4) : 38965
No match
sandbox/mwe/6535_test_cnt.py ✓✓✓ 30% ███
expected_n_bytes: 4
expected_event_table_pos: 4971618850
readed_event_table_pos: 676651554
readed b: 0000000000101000010101001110001000100010
readed_ b: 0000000000101000010101001110001000100010
compute(2) b: 0000000010010100001010100111011010100010
compute(4) b: 0000000100101000010101001110001000100010
compute(2) : 2485810850
compute(4) : 4971618850
match found: ( n_bytes: 4 event_table_pos: 4971618850 )
sandbox/mwe/6535_test_cnt.py ✓✓✓✓ 40% ████
expected_n_bytes: 2
expected_event_table_pos: 133700
readed_event_table_pos: 133700
readed b: 0000000000000000000000100000101001000100
readed_ b: 0000000000000000000000100000101001000100
compute(2) b: 0000000000000000000000100000101001000100
compute(4) b: 0000000000000000000000111111111001000100
compute(2) : 133700
compute(4) : 261700
match found: ( n_bytes: 2 event_table_pos: 133700 )
sandbox/mwe/6535_test_cnt.py ✓✓✓✓✓ 50% █████
expected_n_bytes: 2
expected_event_table_pos: 133700
readed_event_table_pos: 133700
readed b: 0000000000000000000000100000101001000100
readed_ b: 0000000000000000000000100000101001000100
compute(2) b: 0000000000000000000000100000101001000100
compute(4) b: 0000000000000000000000111111111001000100
compute(2) : 133700
compute(4) : 261700
match found: ( n_bytes: 2 event_table_pos: 133700 )
sandbox/mwe/6535_test_cnt.py ✓✓✓✓✓✓ 60% ██████
expected_n_bytes: 2
expected_event_table_pos: 78536260
readed_event_table_pos: 78536260
readed b: 0000000000000100101011100101111001000100
readed_ b: 0000000000000100101011100101111001000100
compute(2) b: 0001111111111111111111010100110111000100
compute(4) b: 0011111111111111111110101000010101000100
compute(2) : 137438776772
compute(4) : 274877547844
No match
sandbox/mwe/6535_test_cnt.py ✓✓✓✓✓✓✓ 70% ███████
expected_n_bytes: 4
expected_event_table_pos: 54570725
readed_event_table_pos: 54570725
readed b: 0000000000000011010000001010111011100101
readed_ b: 0000000000000011010000001010111011100101
compute(2) b: 0000000000000001101000000110001100000101
compute(4) b: 0000000000000011010000001010111011100101
compute(2) : 27288325
compute(4) : 54570725
match found: ( n_bytes: 4 event_table_pos: 54570725 )
sandbox/mwe/6535_test_cnt.py ✓✓✓✓✓✓✓✓ 80% ████████
expected_n_bytes: 2
expected_event_table_pos: 78536260
readed_event_table_pos: 78536260
readed b: 0000000000000100101011100101111001000100
readed_ b: 0000000000000100101011100101111001000100
compute(2) b: 0001111111111111111111010100110111000100
compute(4) b: 0011111111111111111110101000010101000100
compute(2) : 137438776772
compute(4) : 274877547844
No match
sandbox/mwe/6535_test_cnt.py ✓✓✓✓✓✓✓✓✓ 90% █████████
expected_n_bytes: 4
expected_event_table_pos: 54570725
readed_event_table_pos: 54570725
readed b: 0000000000000011010000001010111011100101
readed_ b: 0000000000000011010000001010111011100101
compute(2) b: 0000000000000001101000000110001100000101
compute(4) b: 0000000000000011010000001010111011100101
compute(2) : 27288325
compute(4) : 54570725
match found: ( n_bytes: 4 event_table_pos: 54570725 )
sandbox/mwe/6535_test_cnt.py ✓✓✓✓✓✓✓✓✓✓ 100% ██████████
-------------------- generated xml file: /home/sik/code/mne-python/junit-results.xml --------------------
======================================= slowest 20 test durations =======================================
(0.00 durations hidden. Use -vv to show these durations.)
Results (9.85s):
10 passed
Compilation finished at Wed Jul 10 14:55:17 |
|
914flankers is one of the files that fails. This one I found it publicly somewhere so I guess there is no problem in sharing it: https://www.dropbox.com/s/sj9u2mhx36i3lng/914flankers.cnt?dl=0 |
|
@AimerLee Feel free to:
|
|
Travis already failed https://travis-ci.org/mne-tools/mne-python/jobs/556786989#L3415 |
|
I'll close this for now -- let's start a clean PR when someone is motivated to continue |
This PR takes after #6537
cc: @AimerLee