Source code for scdiffeq.io._model._project
# -- import packages: ---------------------------------------------------------
import ABCParse
import pathlib
# -- import local dependencies: -----------------------------------------------
from ._version import Version
# -- set typing: --------------------------------------------------------------
from typing import Dict, Union
# -- operational class: -------------------------------------------------------
[docs]
class Project(ABCParse.ABCParse):
"""Object container for an scDiffEq project
Attributes:
path (Union[str, pathlib.Path]): Path to the project, created by scDiffeq.
metrics_groupby (str): Grouping method for metrics, default is "epoch".
"""
[docs]
def __init__(
self,
path: Union[str, pathlib.Path] = pathlib.Path("./").absolute(),
metrics_groupby: str = "epoch",
*args,
**kwargs,
) -> None:
"""Initialize the project object by providing a path.
Args:
path (Union[str, pathlib.Path], optional): Path to the project, created by scDiffeq, by default pathlib.Path("./").absolute()
metrics_groupby (str, optional): Grouping method for metrics, by default "epoch"
Returns:
None
"""
self.__parse__(locals())
self._set_version_path_attributes()
@property
def _PROJECT_PATH(self) -> pathlib.Path:
"""Check and format the provided project path
Returns:
pathlib.Path
Formatted project path
Raises:
TypeError: If the path is not of type pathlib.Path or str
"""
if isinstance(self._path, pathlib.Path):
return self._path
elif isinstance(self._path, str):
return pathlib.Path(self._path)
else:
raise TypeError("arg: `path` must be of type: [pathlib.Path, str]")
@property
def _VERSION_PATHS(self) -> Dict[str, pathlib.Path]:
"""Assemble available version paths based on the provided project path
Returns:
Dict[str, pathlib.Path]
Dictionary of version names and their corresponding paths
"""
version_paths = sorted(list(self._PROJECT_PATH.glob("version_*")))
return {path.name: path for path in version_paths}
[docs]
def _set_version_path_attributes(self) -> None:
"""Sets the name of each version as a class attribute, pointing to the
path of the version.
"""
for v_name, v_path in self._VERSION_PATHS.items():
version = Version(path=v_path, groupby=self._metrics_groupby)
setattr(self, v_name, version)
[docs]
def __getitem__(self, version: int) -> pathlib.Path:
"""Format version key and return version
Args:
version (int): Version number
Returns:
pathlib.Path
Path to the specified version
"""
return getattr(self, f"version_{version}")
def __repr__(self) -> str:
return """scDiffEq Project"""