AnnDataLocator
Operational class powering the locate function.
class AnnDataLocator(ABCParse.ABCParse):
"""Query available key values of AnnData. Operational class powering the `locate` function."""
def __init__(self, *args, **kwargs) -> None:
"""
Parameters
----------
Returns
-------
None, initializes class object.
"""
self._ATTRS = {}
def _stash(self, attr: str, attr_val: np.ndarray) -> None:
"""
Parameters
----------
attr: str
attr_val: np.ndarray
Returns
-------
None, updates `self._ATTRS` and sets the (attr, attr_val) key, value pair.
"""
self._ATTRS[attr] = attr_val
setattr(self, attr, attr_val)
def _intake(self, adata: anndata.AnnData) -> None:
"""
Parameters
----------
adata
Returns
-------
"""
for attr in adata.__dir__():
if "key" in attr:
attr_val = getattr(adata, attr)()
self._stash(attr, attr_val)
if attr == "layers":
attr_val = list(getattr(adata, attr))
self._stash(attr, attr_val)
def _cross_reference(self, passed_key: str) -> List[str]:
"""
Parameters
----------
Returns
-------
"""
return [key for key, val in self._ATTRS.items() if passed_key in val]
def _query_str_vals(self, query_result: List[str]) -> str:
"""
Parameters
----------
Returns
-------
"""
return ", ".join(query_result)
def _format_error_msg(self, key: str, query_result: List[str]) -> str:
"""
Parameters
----------
Returns
-------
"""
if len(query_result) > 1:
return f"Found more than one match: [{self._query_str_vals(query_result)}]"
return f"{key} NOT FOUND"
def _format_output_str(self, query_result: List[str]):
"""
Parameters
----------
Returns
-------
"""
return query_result[0].split("_keys")[0]
def _forward(self, adata: anndata.AnnData, key: str) -> str:
"""
Parameters
----------
Returns
-------
"""
self._intake(adata)
query_result = self._cross_reference(passed_key=key)
if len(query_result) != 1:
raise KeyError(self._format_error_msg(key, query_result))
return self._format_output_str(query_result)
def __call__(self, adata: anndata.AnnData, key: str) -> str:
"""
Parameters
----------
adata: anndata.AnnData
key: str
Returns
-------
attr: str
"""
return self._forward(adata, key)
GitHub: GitHub.com/mvinyard/AnnDataQuery/adata_query/_core/_locator.py
Last updated