Skip to content

Commit 44b7275

Browse files
authored
Merge pull request #1745 from NeuralEnsemble/black-formatting
Black formatting
2 parents 6a7b3e3 + c90d204 commit 44b7275

File tree

5 files changed

+91
-71
lines changed

5 files changed

+91
-71
lines changed

neo/rawio/neuralynxrawio/ncssections.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class AcqType(IntEnum):
5151
ATLAS = auto()
5252
UNKNOWN = auto()
5353

54+
5455
class NcsSections:
5556
"""
5657
Contains information regarding the contiguous sections of records in an Ncs file.
@@ -279,8 +280,13 @@ def build_for_ncs_file(ncsMemMap, nlxHdr, gapTolerance=None, strict_gap_mode=Tru
279280
ncsSects.sampFreqUsed = sampFreqUsed
280281
ncsSects.microsPerSampUsed = microsPerSampUsed
281282

282-
elif acqType in [AcqType.DIGITALLYNX, AcqType.DIGITALLYNXSX, AcqType.CHEETAH64,
283-
AcqType.CHEETAH560, AcqType.RAWDATAFILE]:
283+
elif acqType in [
284+
AcqType.DIGITALLYNX,
285+
AcqType.DIGITALLYNXSX,
286+
AcqType.CHEETAH64,
287+
AcqType.CHEETAH560,
288+
AcqType.RAWDATAFILE,
289+
]:
284290
# digital lynx style with fractional frequency and micros per samp determined from block times
285291
if gapTolerance is None:
286292
if strict_gap_mode:

neo/rawio/neuralynxrawio/nlxheader.py

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,13 @@ def _to_bool(txt):
8484
#
8585
# There are now separate patterns for the in header line and in properties cases which cover
8686
# the known variations in each case. They are compiled here once for efficiency.
87-
_openDatetime1_pat = re.compile(r"## (Time|Date) Opened:* \((m/d/y|mm/dd/yyy)\): (?P<date>\S+)"\
88-
r"\s+(\(h:m:s\.ms\)|At Time:) (?P<time>\S+)")
87+
_openDatetime1_pat = re.compile(
88+
r"## (Time|Date) Opened:* \((m/d/y|mm/dd/yyy)\): (?P<date>\S+)" r"\s+(\(h:m:s\.ms\)|At Time:) (?P<time>\S+)"
89+
)
8990
_openDatetime2_pat = re.compile(r"-TimeCreated (?P<date>\S+) (?P<time>\S+)")
90-
_closeDatetime1_pat = re.compile(r"## (Time|Date) Closed:* \((m/d/y|mm/dd/yyy)\): " \
91-
r"(?P<date>\S+)\s+(\(h:m:s\.ms\)|At Time:) (?P<time>\S+)")
91+
_closeDatetime1_pat = re.compile(
92+
r"## (Time|Date) Closed:* \((m/d/y|mm/dd/yyy)\): " r"(?P<date>\S+)\s+(\(h:m:s\.ms\)|At Time:) (?P<time>\S+)"
93+
)
9294
_closeDatetime2_pat = re.compile(r"-TimeClosed (?P<date>\S+) (?P<time>\S+)")
9395

9496
# Precompiled filename pattern
@@ -287,8 +289,9 @@ def _setBitToMicroVolt(self):
287289
if len(btm_entries) == 1:
288290
btm_entries = btm_entries * len(self["channel_ids"])
289291
self["bit_to_microVolt"] = [float(e) * 1e6 for e in btm_entries]
290-
assert len(self["bit_to_microVolt"]) == len( self["channel_ids"]), \
291-
"Number of channel ids does not match bit_to_microVolt conversion factors."
292+
assert len(self["bit_to_microVolt"]) == len(
293+
self["channel_ids"]
294+
), "Number of channel ids does not match bit_to_microVolt conversion factors."
292295

293296
def _setInputRanges(self, numChidEntries):
294297
if "InputRange" in self:
@@ -297,44 +300,48 @@ def _setInputRanges(self, numChidEntries):
297300
self["InputRange"] = [int(ir_entries[0])] * numChidEntries
298301
else:
299302
self["InputRange"] = [int(e) for e in ir_entries]
300-
assert len(self["InputRange"]) == numChidEntries, \
301-
"Number of channel ids does not match input range values."
303+
assert len(self["InputRange"]) == numChidEntries, "Number of channel ids does not match input range values."
302304

303305
def _setFilenameProp(self, txt_header):
304306
"""
305307
Add an OriginalFileName property if in header.
306308
"""
307-
if not 'OriginalFileName' in self.keys():
309+
if not "OriginalFileName" in self.keys():
308310
fnm = NlxHeader._filename_pat.search(txt_header)
309-
if not fnm: return
310-
else: self['OriginalFileName'] = fnm.group(1).strip(' "\t\r\n')
311+
if not fnm:
312+
return
313+
else:
314+
self["OriginalFileName"] = fnm.group(1).strip(' "\t\r\n')
311315
else:
312316
# some file types quote the property so strip that also
313-
self['OriginalFileName'] = self['OriginalFileName'].strip(' "\t\r\n')
317+
self["OriginalFileName"] = self["OriginalFileName"].strip(' "\t\r\n')
314318

315319
def _setTimeDate(self, txt_header):
316320
"""
317321
Read time and date from text of header
318322
"""
319323
import dateutil
324+
320325
# opening time
321326
sr = NlxHeader._openDatetime1_pat.search(txt_header)
322-
if not sr: sr=NlxHeader._openDatetime2_pat.search(txt_header)
327+
if not sr:
328+
sr = NlxHeader._openDatetime2_pat.search(txt_header)
323329
if not sr:
324330
raise IOError(
325-
f"No matching header open date/time for application {self['ApplicationName']} " +
326-
f"version {self['ApplicationVersion']}. Please contact developers."
331+
f"No matching header open date/time for application {self['ApplicationName']} "
332+
+ f"version {self['ApplicationVersion']}. Please contact developers."
327333
)
328334
else:
329335
dt1 = sr.groupdict()
330-
self['recording_opened'] = dateutil.parser.parse(f"{dt1['date']} {dt1['time']}")
336+
self["recording_opened"] = dateutil.parser.parse(f"{dt1['date']} {dt1['time']}")
331337

332338
# close time, if available
333339
sr = NlxHeader._closeDatetime1_pat.search(txt_header)
334-
if not sr: sr=NlxHeader._closeDatetime2_pat.search(txt_header)
340+
if not sr:
341+
sr = NlxHeader._closeDatetime2_pat.search(txt_header)
335342
if sr:
336343
dt2 = sr.groupdict()
337-
self['recording_closed'] = dateutil.parser.parse(f"{dt2['date']} {dt2['time']}")
344+
self["recording_closed"] = dateutil.parser.parse(f"{dt2['date']} {dt2['time']}")
338345

339346
def type_of_recording(self):
340347
"""

neo/rawio/neuronexusrawio.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ def _parse_header(self):
132132
self._n_samples, self._n_channels = self.metadata["status"]["shape"]
133133
# Stored as a simple float32 binary file
134134
BINARY_DTYPE = "float32"
135-
TIMESTAMP_DTYPE = "int64" # this is from the allego sample reader timestamps are np.int64
135+
TIMESTAMP_DTYPE = "int64" # this is from the allego sample reader timestamps are np.int64
136136
binary_file = self.binary_file
137137
timestamp_file = self.timestamp_file
138138

@@ -150,7 +150,7 @@ def _parse_header(self):
150150
# Make the memory map for timestamp
151151
self._timestamps = np.memmap(
152152
timestamp_file,
153-
dtype=TIMESTAMP_DTYPE,
153+
dtype=TIMESTAMP_DTYPE,
154154
mode="r",
155155
offset=0, # headerless binary file
156156
)

neo/rawio/spikeglxrawio.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,8 @@ def _parse_header(self):
184184
chan_id = f"{stream_name}#{chan_name}"
185185

186186
# Separate sync channel in its own stream
187-
is_sync_channel = "SY" in chan_name and not self.load_sync_channel
188-
if is_sync_channel :
187+
is_sync_channel = "SY" in chan_name and not self.load_sync_channel
188+
if is_sync_channel:
189189
# This is a sync channel and should be added as its own stream
190190
sync_stream_id = f"{stream_name}-SYNC"
191191
sync_stream_id_to_buffer_id[sync_stream_id] = buffer_id
@@ -387,7 +387,7 @@ def scan_files(dirname):
387387
continue
388388
meta_filename = Path(root) / file
389389
bin_filename = meta_filename.with_suffix(".bin")
390-
390+
391391
if meta_filename.exists() and bin_filename.exists():
392392
meta = read_meta_file(meta_filename)
393393
info = extract_stream_info(meta_filename, meta)
@@ -401,6 +401,7 @@ def scan_files(dirname):
401401

402402
return info_list
403403

404+
404405
def _add_segment_order(info_list):
405406
"""
406407
Uses gate and trigger numbers to construct a segment index (`seg_index`) for each signal in `info_list`.
@@ -413,7 +414,7 @@ def _add_segment_order(info_list):
413414
"""
414415
# This sets non-integers values before integers
415416
normalize = lambda x: x if isinstance(x, int) else -1
416-
417+
417418
# Segment index is determined by the gate_num and trigger_num in that order
418419
def get_segment_tuple(info):
419420
# Create a key from the normalized gate_num and trigger_num
@@ -475,7 +476,7 @@ def parse_spikeglx_fname(fname):
475476
stream_kind: str or None
476477
The data type identifier, "lf", "ap", "obx", or None
477478
"""
478-
479+
479480
# Standard case: contains gate, trigger, device, and stream kind
480481
# Example: Noise4Sam_g0_t0.imec0.ap
481482
# Format: {run_name}_g{gate_num}_t{trigger_num}.{device}.{stream_kind}
@@ -502,7 +503,7 @@ def parse_spikeglx_fname(fname):
502503
gd = match.groupdict()
503504
return gd["run_name"], int(gd["gate_num"]), "cat", gd["device"], gd["stream_kind"]
504505

505-
# OneBox case: ends in .obx
506+
# OneBox case: ends in .obx
506507
# Example: myRun_g0_t0.obx0.obx
507508
# Format: {run_name}_g{gate_num}_t{trigger_num}.{device}.obx
508509
# Regex tokens:
@@ -641,7 +642,7 @@ def extract_stream_info(meta_file, meta):
641642
device = fname.split(".")[-2] if "." in fname else device
642643
stream_kind = ""
643644
units = "V"
644-
645+
645646
# OneBox gain calculation
646647
# V = i * Vmax / Imax where Imax = obMaxInt, Vmax = obAiRangeMax
647648
# See: https://billkarsh.github.io/SpikeGLX/Sgl_help/Metadata_30.html
@@ -669,7 +670,7 @@ def extract_stream_info(meta_file, meta):
669670
probe_slot = meta.get("imDatPrb_slot", None)
670671
probe_port = meta.get("imDatPrb_port", None)
671672
probe_dock = meta.get("imDatPrb_dock", None)
672-
673+
673674
# OneBox specific metadata
674675
obx_slot = meta.get("imDatObx_slot", None)
675676

@@ -697,10 +698,10 @@ def extract_stream_info(meta_file, meta):
697698
info["probe_port"] = int(probe_port) if probe_port else None
698699
info["probe_dock"] = int(probe_dock) if probe_dock else None
699700
info["obx_slot"] = int(obx_slot) if obx_slot else None
700-
701+
701702
# Add device index
702703
if info.get("device_kind") == "imec":
703-
info["device_index"] = info["device"].split("imec")[-1]
704+
info["device_index"] = info["device"].split("imec")[-1]
704705
elif info.get("device_kind") == "obx":
705706
info["device_index"] = info["device"].split("obx")[-1]
706707
else:
@@ -732,5 +733,4 @@ def extract_stream_info(meta_file, meta):
732733
info["digital_channels"] = [channel for channel in info["channel_names"] if channel.startswith("XD")]
733734
info["analog_channels"] = [channel for channel in info["channel_names"] if channel.startswith("XA")]
734735

735-
736736
return info

neo/test/rawiotest/test_neuralynxrawio.py

Lines changed: 45 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ class TestNcsRecordingType(BaseTestRawIO, unittest.TestCase):
180180
"""
181181
Test of decoding of NlxHeader for type of recording.
182182
"""
183+
183184
rawioclass = NeuralynxRawIO
184185
entities_to_test = []
185186

@@ -207,6 +208,7 @@ class TestNcsSectionsFactory(BaseTestRawIO, unittest.TestCase):
207208
"""
208209
Test building NcsBlocks for files of different revisions.
209210
"""
211+
210212
rawioclass = NeuralynxRawIO
211213
entities_to_test = []
212214

@@ -328,6 +330,7 @@ class TestNcsSections(BaseTestRawIO, unittest.TestCase):
328330
"""
329331
Test building NcsBlocks for files of different revisions.
330332
"""
333+
331334
rawioclass = NeuralynxRawIO
332335
entities_to_test = []
333336

@@ -377,19 +380,19 @@ def test_no_date_time(self):
377380
self.assertEqual(hdr["ApplicationName"], "Pegasus")
378381
self.assertEqual(hdr["FileType"], "Event")
379382

380-
381383
def test_neuraview2(self):
382384
filename = self.get_local_path("neuralynx/Neuraview_v2/original_data/NeuraviewEventMarkers-sample.nev")
383385
hdr = NlxHeader(filename)
384386

385-
self.assertEqual(datetime.datetime(2015,12,14, 15,58,32), hdr['recording_opened'])
386-
self.assertEqual(datetime.datetime(2015,12,14, 15,58,32), hdr['recording_closed'])
387+
self.assertEqual(datetime.datetime(2015, 12, 14, 15, 58, 32), hdr["recording_opened"])
388+
self.assertEqual(datetime.datetime(2015, 12, 14, 15, 58, 32), hdr["recording_closed"])
387389

388390
# left in for possible future header tests
389391

390392
# left in for possible future header tests
391393
def check_dateutil_parse(self, hdrTxt, openPat, closePat, openDate, closeDate):
392394
import dateutil
395+
393396
mtch = openPat.search(hdrTxt)
394397
self.assertIsNotNone(mtch)
395398
dt = mtch.groupdict()
@@ -406,74 +409,78 @@ def test_datetime_parsing(self):
406409
# neuraview2
407410
filename = self.get_local_path("neuralynx/Neuraview_v2/original_data/NeuraviewEventMarkers-sample.nev")
408411
txt_header = NlxHeader.get_text_header(filename)
409-
self.check_dateutil_parse(txt_header, NlxHeader._openDatetime1_pat, NlxHeader._closeDatetime1_pat,
410-
datetime.datetime(2015,12,14, 15,58,32),
411-
datetime.datetime(2015,12,14, 15,58,32))
412+
self.check_dateutil_parse(
413+
txt_header,
414+
NlxHeader._openDatetime1_pat,
415+
NlxHeader._closeDatetime1_pat,
416+
datetime.datetime(2015, 12, 14, 15, 58, 32),
417+
datetime.datetime(2015, 12, 14, 15, 58, 32),
418+
)
412419
hdr = NlxHeader(filename)
413-
self.assertEqual(datetime.datetime(2015,12,14, 15,58,32),
414-
hdr['recording_opened'])
415-
self.assertEqual(datetime.datetime(2015,12,14, 15,58,32),
416-
hdr['recording_closed'])
420+
self.assertEqual(datetime.datetime(2015, 12, 14, 15, 58, 32), hdr["recording_opened"])
421+
self.assertEqual(datetime.datetime(2015, 12, 14, 15, 58, 32), hdr["recording_closed"])
417422

418423
# Cheetah 5.7.4 'inProps'
419424
filename = self.get_local_path("neuralynx/Cheetah_v5.7.4/original_data/CSC1.ncs")
420425
txt_header = NlxHeader.get_text_header(filename)
421-
self.check_dateutil_parse(txt_header, NlxHeader._openDatetime2_pat, NlxHeader._closeDatetime2_pat,
422-
datetime.datetime(2017,2,16, 17,56,4),
423-
datetime.datetime(2017,2,16, 18,1,18))
426+
self.check_dateutil_parse(
427+
txt_header,
428+
NlxHeader._openDatetime2_pat,
429+
NlxHeader._closeDatetime2_pat,
430+
datetime.datetime(2017, 2, 16, 17, 56, 4),
431+
datetime.datetime(2017, 2, 16, 18, 1, 18),
432+
)
424433
hdr = NlxHeader(filename)
425-
self.assertEqual(datetime.datetime(2017,2,16, 17,56,4),
426-
hdr['recording_opened'])
427-
self.assertEqual(datetime.datetime(2017,2,16, 18,1,18),
428-
hdr['recording_closed'])
434+
self.assertEqual(datetime.datetime(2017, 2, 16, 17, 56, 4), hdr["recording_opened"])
435+
self.assertEqual(datetime.datetime(2017, 2, 16, 18, 1, 18), hdr["recording_closed"])
429436

430437
# Cheetah 4.0.2
431438
filename = self.get_local_path("neuralynx/Cheetah_v4.0.2/original_data/CSC14_trunc.Ncs")
432439
txt_header = NlxHeader.get_text_header(filename)
433-
self.check_dateutil_parse(txt_header, NlxHeader._openDatetime1_pat, None,
434-
datetime.datetime(2003,10,4, 10,3,0, 578000),
435-
None)
440+
self.check_dateutil_parse(
441+
txt_header, NlxHeader._openDatetime1_pat, None, datetime.datetime(2003, 10, 4, 10, 3, 0, 578000), None
442+
)
436443
hdr = NlxHeader(filename)
437-
self.assertEqual(datetime.datetime(2003,10,4, 10,3,0, 578000),
438-
hdr['recording_opened'])
439-
self.assertIsNone(hdr.get('recording_closed'))
444+
self.assertEqual(datetime.datetime(2003, 10, 4, 10, 3, 0, 578000), hdr["recording_opened"])
445+
self.assertIsNone(hdr.get("recording_closed"))
440446

441447
# Cheetah 5.4.0 'openClosedInHeader'
442448
filename = self.get_local_path("neuralynx/Cheetah_v5.4.0/original_data/CSC5_trunc.Ncs")
443449
txt_header = NlxHeader.get_text_header(filename)
444-
self.check_dateutil_parse(txt_header, NlxHeader._openDatetime1_pat, NlxHeader._closeDatetime1_pat,
445-
datetime.datetime(2001,1,1, 0,0,0, 0),
446-
datetime.datetime(2001,1,1, 0,0,0, 0))
450+
self.check_dateutil_parse(
451+
txt_header,
452+
NlxHeader._openDatetime1_pat,
453+
NlxHeader._closeDatetime1_pat,
454+
datetime.datetime(2001, 1, 1, 0, 0, 0, 0),
455+
datetime.datetime(2001, 1, 1, 0, 0, 0, 0),
456+
)
447457
hdr = NlxHeader(filename)
448-
self.assertEqual(datetime.datetime(2001,1,1, 0,0,0, 0),
449-
hdr['recording_opened'])
450-
self.assertEqual(datetime.datetime(2001,1,1, 0,0,0, 0),
451-
hdr['recording_closed'])
458+
self.assertEqual(datetime.datetime(2001, 1, 1, 0, 0, 0, 0), hdr["recording_opened"])
459+
self.assertEqual(datetime.datetime(2001, 1, 1, 0, 0, 0, 0), hdr["recording_closed"])
452460

453461
def test_filename_prop(self):
454462
# neuraview2
455463
filename = self.get_local_path("neuralynx/Neuraview_v2/original_data/NeuraviewEventMarkers-sample.nev")
456464
hdr = NlxHeader(filename)
457-
self.assertEqual(r"L:\McHugh Lab\Recording\2015-06-24_18-05-11\NeuraviewEventMarkers-20151214_SleepScore.nev",
458-
hdr['OriginalFileName'])
465+
self.assertEqual(
466+
r"L:\McHugh Lab\Recording\2015-06-24_18-05-11\NeuraviewEventMarkers-20151214_SleepScore.nev",
467+
hdr["OriginalFileName"],
468+
)
459469

460470
# Cheetah 5.7.4 'inProps'
461471
filename = self.get_local_path("neuralynx/Cheetah_v5.7.4/original_data/CSC1.ncs")
462472
hdr = NlxHeader(filename)
463-
self.assertEqual(r'C:\CheetahData\2017-02-16_17-55-55\CSC1.ncs',
464-
hdr['OriginalFileName'])
473+
self.assertEqual(r"C:\CheetahData\2017-02-16_17-55-55\CSC1.ncs", hdr["OriginalFileName"])
465474

466475
# Cheetah 4.0.2
467476
filename = self.get_local_path("neuralynx/Cheetah_v4.0.2/original_data/CSC14_trunc.Ncs")
468477
hdr = NlxHeader(filename)
469-
self.assertEqual(r'D:\Cheetah_Data\2003-10-4_10-2-58\CSC14.Ncs',
470-
hdr['OriginalFileName'])
478+
self.assertEqual(r"D:\Cheetah_Data\2003-10-4_10-2-58\CSC14.Ncs", hdr["OriginalFileName"])
471479

472480
# Cheetah 5.4.0
473481
filename = self.get_local_path("neuralynx/Cheetah_v5.4.0/original_data/CSC5_trunc.Ncs")
474482
hdr = NlxHeader(filename)
475-
self.assertEqual(r'C:\CheetahData\2000-01-01_00-00-00\CSC5.ncs',
476-
hdr['OriginalFileName'])
483+
self.assertEqual(r"C:\CheetahData\2000-01-01_00-00-00\CSC5.ncs", hdr["OriginalFileName"])
477484

478485

479486
if __name__ == "__main__":

0 commit comments

Comments
 (0)