Source code for isicle.utils

import collections
import os
import shutil
import tempfile
from importlib import resources

import numpy as np
import pandas as pd


[docs] def safelist(x): """ Ensures passed object is of correct format. Parameters ---------- x : any Object to be cast as list. Returns ------- list, :obj:`~pd.core.series.Series`, or :obj:`~np.ndarray` Input safely cast to list-like. """ if not isinstance(x, (list, pd.core.series.Series, np.ndarray)): return [x].copy() return x.copy()
[docs] class TypedList(collections.abc.MutableSequence): """ Mutable sequence that requires all members be of select type(s). Attributes ---------- oktypes : type or list of types Object types allowed list membership. list : list Internal list representation. """ def __init__(self, oktypes, *args): """ Initialize :obj:`~isicle.utils.TypedList` instance. Parameters ---------- oktypes : type or list of types Object types allowed list membership. *args Objects to comprise the type-restricted list. """ self.oktypes = oktypes self.list = list() try: self.extend(*args) except: self.extend(list(args))
[docs] def check(self, v): """ Check if supplied value is of allowed type(s). Raises ------ TypeError If value is not of allowed type(s). """ if not isinstance(v, self.oktypes): raise TypeError(v)
def __len__(self): return len(self.list) def __getitem__(self, i): return self.list[i] def __delitem__(self, i): del self.list[i] def __setitem__(self, i, v): self.check(v) self.list[i] = v
[docs] def insert(self, i, v): self.check(v) self.list.insert(i, v)
def __str__(self): return str(self.list) def __repr__(self): return self.__str__()
[docs] def atomic_masses(): path = resources.files("isicle") / "resources/atomic_masses.tsv" return pd.read_csv(path, sep="\s+")
[docs] def tinker_lookup(): path = resources.files("isicle") / "resources/tinker_lookup.tsv" return pd.read_csv(path, sep="\t")
[docs] def gettempdir(): """ Return the name of the directory used for temporary files. Returns ------- str Path to temporary directory. """ root = os.path.join(tempfile.gettempdir(), 'isicle') os.makedirs(root, exist_ok=True) return root
[docs] def mkdtemp(prefix=None, suffix=None): """ An ISiCLE-specific wrapper of :func:`~tempfile.mkdtemp` to create a temporary directory for temporary ISiCLE files. The temporary directory is not automatically removed. Parameters ---------- prefix : str If not None, temporary directory will start with `prefix`. suffix : str If not None, temporary directory will end with `suffix`. Returns ------- str Path to temporary directory. """ return tempfile.mkdtemp(dir=gettempdir(), prefix=prefix, suffix=suffix)
[docs] def rmdtemp(): """ Removes all temporary directories and files created by ISiCLE. """ shutil.rmtree(gettempdir(), ignore_errors=True)