diff --git a/cmlreaders/base_reader.py b/cmlreaders/base_reader.py
index 8ac7906..e1bc92b 100644
--- a/cmlreaders/base_reader.py
+++ b/cmlreaders/base_reader.py
@@ -74,16 +74,6 @@ class BaseCMLReader(object, metaclass=_MetaReader):
         if self._file_path is None:
             self._file_path = file_path
 
-        # When no file path is given, look it up using PathFinder unless we're
-        # loading EEG data. EEG data is treated differently because of the way
-        # it is stored on rhino: sometimes it is split into one file per channel
-        # and other times it is a single HDF5 or EDF/BDF file.
-        if self._file_path is None and data_type != 'eeg':
-            finder = PathFinder(subject=subject, experiment=experiment,
-                                session=session, localization=localization,
-                                montage=montage, rootdir=rootdir)
-            self._file_path = finder.find(data_type)
-
         self.subject = subject
         self.experiment = experiment
         self.session = session
@@ -96,6 +86,21 @@ class BaseCMLReader(object, metaclass=_MetaReader):
     def protocol(self):
         return get_protocol(self.subject)
 
+    @property
+    def file_path(self):
+        """
+        When no file path is given, look it up using PathFinder unless we're
+        loading EEG data. EEG data is treated differently because of the way
+        it is stored on rhino: sometimes it is split into one file per channel
+        and other times it is a single HDF5 or EDF/BDF file.
+        """
+        if self._file_path is None and self.data_type != 'eeg':
+            finder = PathFinder(subject=self.subject, experiment=self.experiment,
+                                session=self.session, localization=self.localization,
+                                montage=self.montage, rootdir=self.rootdir)
+            self._file_path = finder.find(self.data_type)
+        return self._file_path
+
     @classmethod
     def fromfile(cls, path: Union[str, Path],
                  subject: Optional[str] = None,
diff --git a/cmlreaders/readers/eeg.py b/cmlreaders/readers/eeg.py
index 5a7247c..616b8e4 100644
--- a/cmlreaders/readers/eeg.py
+++ b/cmlreaders/readers/eeg.py
@@ -38,9 +38,9 @@ class EEGMetaReader(BaseCMLReader):
 
     def _read_sources_json(self) -> dict:
         """Read from a sources.json file."""
-        with open(self._file_path, 'r') as metafile:
+        with open(self.file_path, 'r') as metafile:
             sources_info = list(json.load(metafile).values())[0]
-            sources_info['path'] = self._file_path
+            sources_info['path'] = self.file_path
             return sources_info
 
     def _read_params_txt(self) -> dict:
@@ -48,13 +48,13 @@ class EEGMetaReader(BaseCMLReader):
         sources.json.
 
         """
-        df = pd.read_table(self._file_path, sep=' ', header=None, index_col=0).T
+        df = pd.read_table(self.file_path, sep=' ', header=None, index_col=0).T
 
         sources_info = {
             "sample_rate": float(df["samplerate"].iloc[0]),
             "data_format": df["dataformat"].str.replace("'", "").iloc[0],
             "n_samples": None,
-            "path": self._file_path,
+            "path": self.file_path,
         }
 
         return sources_info
diff --git a/cmlreaders/readers/electrodes.py b/cmlreaders/readers/electrodes.py
index 4ec2646..15276a4 100644
--- a/cmlreaders/readers/electrodes.py
+++ b/cmlreaders/readers/electrodes.py
@@ -74,13 +74,13 @@ class MontageReader(BaseCMLReader):
         return df
 
     def as_dataframe(self):
-        with open(self._file_path) as f:
+        with open(self.file_path) as f:
             raw = json.load(f)
 
             # we're using fromfile, so we need to infer subject/data_type
             if not len(self.data_type):
                 self.data_type = (
-                    "contacts" if "contacts" in os.path.basename(self._file_path)
+                    "contacts" if "contacts" in os.path.basename(self.file_path)
                     else "pairs"
                 )
 
@@ -142,7 +142,7 @@ class LocalizationReader(BaseCMLReader):
     def as_dataframe(self):
         import itertools
 
-        with open(self._file_path) as f:
+        with open(self.file_path) as f:
             data = json.load(f)
 
         leads = list(data['leads'].values())
@@ -206,7 +206,7 @@ class ElectrodeCategoriesReader(BaseCMLReader):
             'bad electrodes', 'bad electrodes:', 'broken leads', 'broken leads:'
         }
 
-        with open(self._file_path, 'r') as f:
+        with open(self.file_path, 'r') as f:
             ch_info = f.read().split('\n')
 
         # This will be used to initalize a before after kind of check to sort
diff --git a/cmlreaders/readers/readers.py b/cmlreaders/readers/readers.py
index ceb8eb9..1ace5ff 100644
--- a/cmlreaders/readers/readers.py
+++ b/cmlreaders/readers/readers.py
@@ -39,14 +39,14 @@ class TextReader(BaseCMLReader):
             sep = " "
         else:
             sep = ","  # read_csv's default value
-        df = pd.read_csv(self._file_path, sep=sep, names=self._headers)
+        df = pd.read_csv(self.file_path, sep=sep, names=self._headers)
         return df
 
 
 class BaseCSVReader(BaseCMLReader):
     """Base class for reading CSV files."""
     def as_dataframe(self):
-        df = pd.read_csv(self._file_path)
+        df = pd.read_csv(self.file_path)
         return df
 
 
@@ -86,7 +86,7 @@ class RamulatorEventLogReader(BaseCMLReader):
                                                       rootdir=rootdir)
 
     def as_dataframe(self):
-        with open(self._file_path, 'r') as efile:
+        with open(self.file_path, 'r') as efile:
             raw = json.loads(efile.read())['events']
 
         exclude = ['to_id', 'from_id', 'event_id', 'command_id']
@@ -94,7 +94,7 @@ class RamulatorEventLogReader(BaseCMLReader):
         return df.drop(exclude, axis=1)
 
     def as_dict(self):
-        with open(self._file_path, 'r') as efile:
+        with open(self.file_path, 'r') as efile:
             raw_dict = json.load(efile)
         return raw_dict
 
@@ -108,7 +108,7 @@ class BaseJSONReader(BaseCMLReader):
     data_types = []
 
     def as_dataframe(self):
-        return pd.read_json(self._file_path)
+        return pd.read_json(self.file_path)
 
 
 class EventReader(BaseCMLReader):
@@ -122,10 +122,10 @@ class EventReader(BaseCMLReader):
     ]
 
     def _read_json_events(self) -> pd.DataFrame:
-        return pd.read_json(self._file_path)
+        return pd.read_json(self.file_path)
 
     def _read_matlab_events(self) -> pd.DataFrame:
-        df = pd.DataFrame(sio.loadmat(self._file_path, squeeze_me=True)["events"])
+        df = pd.DataFrame(sio.loadmat(self.file_path, squeeze_me=True)["events"])
 
         if self.session is not None:
             df = df[df["session"] == self.session]
@@ -133,7 +133,7 @@ class EventReader(BaseCMLReader):
         return df
 
     def as_dataframe(self):
-        if self._file_path.endswith(".json"):
+        if self.file_path.endswith(".json"):
             df = self._read_json_events()
         else:
             df = self._read_matlab_events()
@@ -175,7 +175,7 @@ class ClassifierContainerReader(BaseCMLReader):
 
     def as_pyobject(self):
         summary_obj = self.pyclass_mapping['classifier']
-        return summary_obj.load(self._file_path)
+        return summary_obj.load(self.file_path)
 
     def as_dataframe(self):
         raise UnsupportedRepresentation("Unable to represent classifier as a dataframe")
diff --git a/cmlreaders/readers/reports.py b/cmlreaders/readers/reports.py
index ecb92fd..e90e3c2 100644
--- a/cmlreaders/readers/reports.py
+++ b/cmlreaders/readers/reports.py
@@ -40,7 +40,7 @@ class BaseRAMReportDataReader(BaseCMLReader):
     def as_pyobject(self):
         """Return data as a python object specific to this data type."""
         if self.data_type in self.pyclass_mapping:
-            return self.pyclass_mapping[self.data_type].from_hdf(self._file_path)
+            return self.pyclass_mapping[self.data_type].from_hdf(self.file_path)
 
     def as_dataframe(self):
         raise exc.UnsupportedRepresentation("Unable to represent this data as a dataframe")
@@ -109,7 +109,7 @@ class RAMReportSummaryDataReader(BaseRAMReportDataReader):
 
         summary_obj = self.pyclass_mapping['fr_stim_summary']
 
-        return summary_obj.from_hdf(self._file_path)
+        return summary_obj.from_hdf(self.file_path)
 
     def as_dataframe(self):
         pyobj = self.as_pyobject()

Defer FileNotFoundError until calling the load method
The `BaseCMLReader` immediately tries to find files in `__init__`:

https://github.com/pennmem/cmlreaders/blob/9423bd938b6d9e49395b6b175f1b42311e5c5bd1/cmlreaders/base_reader.py#L60-L76

This leads to some awkward exception handling logic if you want to optionally load something because you have to put the `try...except` around the creation of a reader object. It would be far more natural to do this around `reader.load`.

An example of what I mean follows. What you have to do now is:

```python
        try:
            category_reader = ElectrodeCategoriesReader(
                data_type="electrode_categories",
                subject=self.subject,
                experiment=self.experiment,
                session=self.session,
                localization=self.localization,
                montage=self.montage,
                rootdir=self.rootdir,
            )
        except FileNotFoundError:
            print("oops")

        categories = category_reader.load()
```

Ideally, we would instead do:

```python
category_reader = ElectrodeCategoriesReader(
    data_type="electrode_categories",
    subject=self.subject,
    experiment=self.experiment,
    session=self.session,
    localization=self.localization,
    montage=self.montage,
    rootdir=self.rootdir,
)

try:
    categories = category_reader.load()
except FileNotFoundError:
    print("oops")
```
diff --git a/cmlreaders/test/test_readers.py b/cmlreaders/test/test_readers.py
index 97e7520..e95211d 100644
--- a/cmlreaders/test/test_readers.py
+++ b/cmlreaders/test/test_readers.py
@@ -83,6 +83,15 @@ class TestTextReader:
         reread_data = re_reader.as_dataframe()
         assert reread_data is not None
 
+    def test_failures(self):
+        """
+        When unable to locate a path, constructor should pass but `load()`
+        should fail.
+        """
+        reader = TextReader('jacksheet', subject='R1XXX', localization=0)
+        with pytest.raises(FileNotFoundError):
+            reader.load()
+
 
 class TestRAMCSVReader:
     @pytest.mark.parametrize("method", ["dataframe", "recarray", "dict"])

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest pytest-cov
apt-get update apt-get install -y gcc
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.13
async-generator==1.10
attrs==22.2.0
Babel==2.11.0
bleach==4.1.0
cached-property==1.5.2
certifi==2021.5.30
charset-normalizer==2.0.12
-e git+https://github.com/pennmem/cmlreaders.git@23c4206adaf18b6c4f528543f9b4eded01a19c54#egg=cmlreaders
codecov==2.1.13
coverage==6.2
cycler==0.11.0
decorator==5.1.1
defusedxml==0.7.1
docutils==0.18.1
entrypoints==0.4
flake8==3.9.2
h5py==3.1.0
idna==3.10
imagesize==1.4.1
importlib-metadata==4.8.3
iniconfig==1.1.1
ipython-genutils==0.2.0
Jinja2==3.0.3
jsonschema==3.2.0
jupyter-client==7.1.2
jupyter-core==4.9.2
jupyterlab-pygments==0.1.2
kiwisolver==1.3.1
MarkupSafe==2.0.1
matplotlib==3.3.4
mccabe==0.6.1
mistune==0.8.4
mne==0.23.4
nbclient==0.5.9
nbconvert==6.0.7
nbformat==5.1.3
nbsphinx==0.8.8
nest-asyncio==1.6.0
numpy==1.19.5
packaging==21.3
pandas==1.1.5
pandocfilters==1.5.1
Pillow==8.4.0
pluggy==1.0.0
py==1.11.0
pycodestyle==2.7.0
pyflakes==2.3.1
Pygments==2.14.0
pyparsing==3.1.4
pyrsistent==0.18.0
pytest==7.0.1
pytest-cov==4.0.0
python-dateutil==2.9.0.post0
pytz==2025.2
pyzmq==25.1.2
requests==2.27.1
scipy==1.5.4
six==1.17.0
snowballstemmer==2.2.0
Sphinx==5.3.0
sphinx-rtd-theme==2.0.0
sphinxcontrib-applehelp==1.0.2
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp==2.0.0
sphinxcontrib-jquery==4.1
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml==1.1.5
testpath==0.6.0
tomli==1.2.3
tornado==6.1
traitlets==4.3.3
typing_extensions==4.1.1
urllib3==1.26.20
webencodings==0.5.1
zipp==3.6.0

name: cmlreaders
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.13
      - async-generator==1.10
      - attrs==22.2.0
      - babel==2.11.0
      - bleach==4.1.0
      - cached-property==1.5.2
      - charset-normalizer==2.0.12
      - codecov==2.1.13
      - coverage==6.2
      - cycler==0.11.0
      - decorator==5.1.1
      - defusedxml==0.7.1
      - docutils==0.18.1
      - entrypoints==0.4
      - flake8==3.9.2
      - h5py==3.1.0
      - idna==3.10
      - imagesize==1.4.1
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - ipython-genutils==0.2.0
      - jinja2==3.0.3
      - jsonschema==3.2.0
      - jupyter-client==7.1.2
      - jupyter-core==4.9.2
      - jupyterlab-pygments==0.1.2
      - kiwisolver==1.3.1
      - markupsafe==2.0.1
      - matplotlib==3.3.4
      - mccabe==0.6.1
      - mistune==0.8.4
      - mne==0.23.4
      - nbclient==0.5.9
      - nbconvert==6.0.7
      - nbformat==5.1.3
      - nbsphinx==0.8.8
      - nest-asyncio==1.6.0
      - numpy==1.19.5
      - packaging==21.3
      - pandas==1.1.5
      - pandocfilters==1.5.1
      - pillow==8.4.0
      - pluggy==1.0.0
      - py==1.11.0
      - pycodestyle==2.7.0
      - pyflakes==2.3.1
      - pygments==2.14.0
      - pyparsing==3.1.4
      - pyrsistent==0.18.0
      - pytest==7.0.1
      - pytest-cov==4.0.0
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - pyzmq==25.1.2
      - requests==2.27.1
      - scipy==1.5.4
      - six==1.17.0
      - snowballstemmer==2.2.0
      - sphinx==5.3.0
      - sphinx-rtd-theme==2.0.0
      - sphinxcontrib-applehelp==1.0.2
      - sphinxcontrib-devhelp==1.0.2
      - sphinxcontrib-htmlhelp==2.0.0
      - sphinxcontrib-jquery==4.1
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==1.0.3
      - sphinxcontrib-serializinghtml==1.1.5
      - testpath==0.6.0
      - tomli==1.2.3
      - tornado==6.1
      - traitlets==4.3.3
      - typing-extensions==4.1.1
      - urllib3==1.26.20
      - webencodings==0.5.1
      - zipp==3.6.0
prefix: /opt/conda/envs/cmlreaders

cmlreaders/test/test_readers.py::TestTextReader::test_failures
cmlreaders/test/test_readers.py::TestMontageReader::test_load[R1405E-0-0-contacts] cmlreaders/test/test_readers.py::TestMontageReader::test_load[R1405E-0-0-pairs] cmlreaders/test/test_readers.py::TestMontageReader::test_load[R1006P-0-0-contacts] cmlreaders/test/test_readers.py::TestMontageReader::test_load[R1006P-0-0-pairs] cmlreaders/test/test_readers.py::TestMontageReader::test_load[R1006P-0-1-contacts] cmlreaders/test/test_readers.py::TestMontageReader::test_load[R1006P-0-1-pairs] cmlreaders/test/test_readers.py::TestElectrodeCategoriesReader::test_load[R1111M-lens0] cmlreaders/test/test_readers.py::TestElectrodeCategoriesReader::test_load[R1052E-lens1] cmlreaders/test/test_readers.py::TestClassifierContainerReader::test_as_methods[baseline_classifier-pyobject] cmlreaders/test/test_readers.py::TestClassifierContainerReader::test_as_methods[used_classifier-pyobject] cmlreaders/test/test_readers.py::TestClassifierContainerReader::test_to_methods[baseline_classifier-binary] cmlreaders/test/test_readers.py::TestClassifierContainerReader::test_to_methods[used_classifier-binary]
cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-voxel_coordinates-dataframe] cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-voxel_coordinates-recarray] cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-voxel_coordinates-dict] cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-leads-dataframe] cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-leads-recarray] cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-leads-dict] cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-classifier_excluded_leads-dataframe] cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-classifier_excluded_leads-recarray] cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-classifier_excluded_leads-dict] cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-good_leads-dataframe] cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-good_leads-recarray] cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-good_leads-dict] cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-jacksheet-dataframe] cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-jacksheet-recarray] cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-jacksheet-dict] cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-area-dataframe] cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-area-recarray] cmlreaders/test/test_readers.py::TestTextReader::test_as_methods[R1389J-0-area-dict] cmlreaders/test/test_readers.py::TestTextReader::test_read_jacksheet cmlreaders/test/test_readers.py::TestTextReader::test_to_methods[R1389J-0-voxel_coordinates-json] cmlreaders/test/test_readers.py::TestTextReader::test_to_methods[R1389J-0-voxel_coordinates-csv] cmlreaders/test/test_readers.py::TestTextReader::test_to_methods[R1389J-0-leads-json] cmlreaders/test/test_readers.py::TestTextReader::test_to_methods[R1389J-0-leads-csv] cmlreaders/test/test_readers.py::TestTextReader::test_to_methods[R1389J-0-classifier_excluded_leads-json] cmlreaders/test/test_readers.py::TestTextReader::test_to_methods[R1389J-0-classifier_excluded_leads-csv] cmlreaders/test/test_readers.py::TestTextReader::test_to_methods[R1389J-0-good_leads-json] cmlreaders/test/test_readers.py::TestTextReader::test_to_methods[R1389J-0-good_leads-csv] cmlreaders/test/test_readers.py::TestTextReader::test_to_methods[R1389J-0-jacksheet-json] cmlreaders/test/test_readers.py::TestTextReader::test_to_methods[R1389J-0-jacksheet-csv] cmlreaders/test/test_readers.py::TestTextReader::test_to_methods[R1389J-0-area-json] cmlreaders/test/test_readers.py::TestTextReader::test_to_methods[R1389J-0-area-csv] cmlreaders/test/test_readers.py::TestRAMCSVReader::test_as_methods[R1409D-0-electrode_coordinates-dataframe] cmlreaders/test/test_readers.py::TestRAMCSVReader::test_as_methods[R1409D-0-electrode_coordinates-recarray] cmlreaders/test/test_readers.py::TestRAMCSVReader::test_as_methods[R1409D-0-electrode_coordinates-dict] cmlreaders/test/test_readers.py::TestRAMCSVReader::test_as_methods[R1409D-0-prior_stim_results-dataframe] cmlreaders/test/test_readers.py::TestRAMCSVReader::test_as_methods[R1409D-0-prior_stim_results-recarray] cmlreaders/test/test_readers.py::TestRAMCSVReader::test_as_methods[R1409D-0-prior_stim_results-dict] cmlreaders/test/test_readers.py::TestRAMCSVReader::test_as_methods[R1409D-0-target_selection_table-dataframe] cmlreaders/test/test_readers.py::TestRAMCSVReader::test_as_methods[R1409D-0-target_selection_table-recarray] cmlreaders/test/test_readers.py::TestRAMCSVReader::test_as_methods[R1409D-0-target_selection_table-dict] cmlreaders/test/test_readers.py::TestRAMCSVReader::test_to_methods[R1409D-0-electrode_coordinates-json] cmlreaders/test/test_readers.py::TestRAMCSVReader::test_to_methods[R1409D-0-electrode_coordinates-csv] cmlreaders/test/test_readers.py::TestRAMCSVReader::test_to_methods[R1409D-0-prior_stim_results-json] cmlreaders/test/test_readers.py::TestRAMCSVReader::test_to_methods[R1409D-0-prior_stim_results-csv] cmlreaders/test/test_readers.py::TestRAMCSVReader::test_to_methods[R1409D-0-target_selection_table-json] cmlreaders/test/test_readers.py::TestRAMCSVReader::test_to_methods[R1409D-0-target_selection_table-csv] cmlreaders/test/test_readers.py::TestRamulatorEventLogReader::test_as_methods[R1409D-catFR1-1-event_log-dataframe] cmlreaders/test/test_readers.py::TestRamulatorEventLogReader::test_as_methods[R1409D-catFR1-1-event_log-recarray] cmlreaders/test/test_readers.py::TestRamulatorEventLogReader::test_as_methods[R1409D-catFR1-1-event_log-dict] cmlreaders/test/test_readers.py::TestRamulatorEventLogReader::test_to_methods[R1409D-catFR1-1-event_log-json] cmlreaders/test/test_readers.py::TestRamulatorEventLogReader::test_to_methods[R1409D-catFR1-1-event_log-csv] cmlreaders/test/test_readers.py::TestBaseJSONReader::test_load cmlreaders/test/test_readers.py::TestEventReader::test_load_json cmlreaders/test/test_readers.py::TestEventReader::test_load_matlab[all_events] cmlreaders/test/test_readers.py::TestEventReader::test_load_matlab[task_events] cmlreaders/test/test_readers.py::TestEventReader::test_load_matlab[math_events] cmlreaders/test/test_readers.py::TestLocalizationReader::test_load cmlreaders/test/test_readers.py::test_fromfile[ElectrodeCategoriesReader-/cmlreaders/cmlreaders/test/data/electrode_categories.txt-dict] cmlreaders/test/test_readers.py::test_fromfile[MontageReader-/cmlreaders/cmlreaders/test/data/pairs.json-DataFrame] cmlreaders/test/test_readers.py::test_fromfile[MontageReader-/cmlreaders/cmlreaders/test/data/contacts.json-DataFrame] cmlreaders/test/test_readers.py::test_fromfile[RamulatorEventLogReader-/cmlreaders/cmlreaders/test/data/event_log.json-DataFrame]
cmlreaders/readers/electrodes.py cmlreaders/readers/eeg.py cmlreaders/readers/readers.py cmlreaders/base_reader.py cmlreaders/readers/reports.py
cmlreaders/readers/electrodes.py cmlreaders/readers/eeg.py cmlreaders/readers/readers.py cmlreaders/base_reader.py cmlreaders/readers/reports.py