44
55from __future__ import annotations
66
7- import importlib
87import re
98from collections import defaultdict
109from typing import TYPE_CHECKING
1615from ...annotations import Annotations
1716from ...utils import (
1817 _check_fname ,
18+ _soft_import ,
1919 _validate_type ,
20- check_version ,
2120 copy_doc ,
2221 fill_doc ,
2322 logger ,
@@ -80,6 +79,8 @@ class RawANT(BaseRaw):
8079 Note that the impedance annotation will likely have a duration of ``0``.
8180 If the measurement marks a discontinuity, the duration should be modified to
8281 cover the discontinuity in its entirety.
82+ encoding : str
83+ Encoding to use for :class:`str` in the CNT file. Defaults to ``'latin-1'``.
8384 %(preload)s
8485 %(verbose)s
8586 """
@@ -93,16 +94,12 @@ def __init__(
9394 bipolars : list [str ] | tuple [str , ...] | None ,
9495 impedance_annotation : str ,
9596 * ,
97+ encoding : str = "latin-1" ,
9698 preload : bool | NDArray ,
9799 verbose = None ,
98100 ) -> None :
99101 logger .info ("Reading ANT file %s" , fname )
100- if importlib .util .find_spec ("antio" ) is None :
101- raise ImportError (
102- "Missing optional dependency 'antio'. Use pip or conda to install "
103- "'antio'."
104- )
105- check_version ("antio" , "0.3.0" )
102+ _soft_import ("antio" , "reading ANT files" , min_version = "0.5.0" )
106103
107104 from antio import read_cnt
108105 from antio .parser import (
@@ -122,8 +119,7 @@ def __init__(
122119 raise ValueError ("The impedance annotation cannot be an empty string." )
123120 cnt = read_cnt (fname )
124121 # parse channels, sampling frequency, and create info
125- ch_info = read_info (cnt ) # load in 2 lines for compat with antio 0.2 and 0.3
126- ch_names , ch_units , ch_refs = ch_info [0 ], ch_info [1 ], ch_info [2 ]
122+ ch_names , ch_units , ch_refs , _ , _ = read_info (cnt , encoding = encoding )
127123 ch_types = _parse_ch_types (ch_names , eog , misc , ch_refs )
128124 if bipolars is not None : # handle bipolar channels
129125 bipolars_idx = _handle_bipolar_channels (ch_names , ch_refs , bipolars )
@@ -139,9 +135,9 @@ def __init__(
139135 ch_names , sfreq = cnt .get_sample_frequency (), ch_types = ch_types
140136 )
141137 info .set_meas_date (read_meas_date (cnt ))
142- make , model , serial , site = read_device_info (cnt )
138+ make , model , serial , site = read_device_info (cnt , encoding = encoding )
143139 info ["device_info" ] = dict (type = make , model = model , serial = serial , site = site )
144- his_id , name , sex , birthday = read_subject_info (cnt )
140+ his_id , name , sex , birthday = read_subject_info (cnt , encoding = encoding )
145141 info ["subject_info" ] = dict (
146142 his_id = his_id ,
147143 first_name = name ,
@@ -315,6 +311,7 @@ def read_raw_ant(
315311 bipolars = None ,
316312 impedance_annotation = "impedance" ,
317313 * ,
314+ encoding : str = "latin-1" ,
318315 preload = False ,
319316 verbose = None ,
320317) -> RawANT :
@@ -324,13 +321,18 @@ def read_raw_ant(
324321 raw : instance of RawANT
325322 A Raw object containing ANT data.
326323 See :class:`mne.io.Raw` for documentation of attributes and methods.
324+
325+ Notes
326+ -----
327+ .. versionadded:: 1.9
327328 """
328329 return RawANT (
329330 fname ,
330331 eog = eog ,
331332 misc = misc ,
332333 bipolars = bipolars ,
333334 impedance_annotation = impedance_annotation ,
335+ encoding = encoding ,
334336 preload = preload ,
335337 verbose = verbose ,
336338 )
0 commit comments