Source code for hed.models.tabular_input
""" A BIDS tabular file with sidecar. """
from __future__ import annotations
from typing import Union
from hed.models.column_mapper import ColumnMapper
from hed.models.base_input import BaseInput
from hed.models.sidecar import Sidecar
[docs]
class TabularInput(BaseInput):
""" A BIDS tabular file with sidecar. """
HED_COLUMN_NAME = "HED"
[docs]
def __init__(self, file=None, sidecar=None, name=None):
""" Constructor for the TabularInput class.
Parameters:
file (str or FileLike or pd.Dataframe): A tsv file to open.
sidecar (str or Sidecar or FileLike): A Sidecar or source file/filename.
name (str): The name to display for this file for error purposes.
Raises:
HedFileError: For the following issues:
- The file is blank.
- An invalid dataframe was passed with size 0.
- An invalid extension was provided.
- A duplicate or empty column name appears.
OSError: If it cannot open the indicated file.
ValueError: If this file has no column names.
"""
if sidecar and not isinstance(sidecar, Sidecar):
sidecar = Sidecar(sidecar)
new_mapper = ColumnMapper(sidecar=sidecar, optional_tag_columns=[self.HED_COLUMN_NAME],
warn_on_missing_column=True)
self._sidecar = sidecar
super().__init__(file, file_type=".tsv", worksheet_name=None, has_column_names=True, mapper=new_mapper,
name=name, allow_blank_names=False, )
if not self._has_column_names:
raise ValueError("You are attempting to open a bids_old style file with no column headers provided.\n"
"This is probably not intended.")
[docs]
def reset_column_mapper(self, sidecar=None):
""" Change the sidecars and settings.
Parameters:
sidecar (str or [str] or Sidecar or [Sidecar]): A list of json filenames to pull sidecar info from.
"""
new_mapper = ColumnMapper(sidecar=sidecar, optional_tag_columns=[self.HED_COLUMN_NAME])
self._sidecar = sidecar
self.reset_mapper(new_mapper)
[docs]
def get_def_dict(self, hed_schema, extra_def_dicts=None) -> 'DefinitionDict':
""" Return the definition dict for this sidecar.
Parameters:
hed_schema (HedSchema): Used to identify tags to find definitions.
extra_def_dicts (list, DefinitionDict, or None): Extra dicts to add to the list.
Returns:
DefinitionDict: A single definition dict representing all the data(and extra def dicts).
"""
if self._sidecar:
return self._sidecar.get_def_dict(hed_schema, extra_def_dicts)
else:
return super().get_def_dict(hed_schema, extra_def_dicts)
[docs]
def get_column_refs(self) -> list[str]:
""" Return a list of column refs for this file.
Default implementation returns none.
Returns:
list[str]: A list of unique column refs found.
"""
if self._sidecar:
return self._sidecar.get_column_refs()
return []
[docs]
def get_sidecar(self) -> Union[Sidecar, None]:
"""Return the sidecar associated with this TabularInput."""
return self._sidecar