mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-09-16 21:37:59 +08:00
* dead code and route removal * more dead code cleanup * fix scanpy_engine tests * lint * add missing catch in filter parsing * update scanpy NaN tests * more fbs tests and dead test removal * remove forced default for content type negotiation * bit of cleanup * more fbs test cleanup * lint * remove swagger * swagger cleanup * lint * correctly handle lack of templates * more dead code removal * remove unused files * fix dev build * lint
78 lines
2.7 KiB
Python
78 lines
2.7 KiB
Python
from abc import ABCMeta, abstractmethod
|
|
|
|
"""
|
|
Sort order for methods
|
|
1. Initialize
|
|
2. Helper
|
|
3. Filter
|
|
4. Data & Metadata
|
|
5. Computation
|
|
"""
|
|
|
|
|
|
class CXGDriver(metaclass=ABCMeta):
|
|
def __init__(self, data, args):
|
|
self.data = self._load_data(data)
|
|
self.layout_method = args["layout"]
|
|
self.diffexp_method = args["diffexp"]
|
|
self.max_category_items = args["max_category_items"]
|
|
self.diffexp_lfc_cutoff = args["diffexp_lfc_cutoff"]
|
|
self.cluster = None
|
|
|
|
@property
|
|
def features(self):
|
|
features = {
|
|
"cluster": {"available": False},
|
|
"layout": {"obs": {"available": False}, "var": {"available": False}},
|
|
"diffexp": {"available": False},
|
|
}
|
|
# TODO - Interactive limit should be generated from the actual available methods see GH issue #94
|
|
if self.layout_method:
|
|
# TODO handle "var" when gene layout becomes available
|
|
features["layout"]["obs"] = {"available": True, "interactiveLimit": 50000}
|
|
if self.diffexp_method:
|
|
features["diffexp"] = {"available": True, "interactiveLimit": 50000}
|
|
if self.cluster:
|
|
features["cluster"] = {"available": True, "interactiveLimit": 50000}
|
|
return features
|
|
|
|
@staticmethod
|
|
@abstractmethod
|
|
def _load_data(data):
|
|
pass
|
|
|
|
@abstractmethod
|
|
def annotation_to_fbs_matrix(self, axis, field=None):
|
|
"""
|
|
Gets annotation value for each observation
|
|
:param axis: string obs or var
|
|
:param fields: list of keys for annotation to return, returns all annotation values if not set.
|
|
:return: flatbuffer: in fbs/matrix.fbs encoding
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def data_frame_to_fbs_matrix(self, filter, axis):
|
|
pass
|
|
|
|
@abstractmethod
|
|
def diffexp_topN(self, obsFilter1, obsFilter2, top_n=None, interactive_limit=None):
|
|
"""
|
|
Computes the top N differentially expressed variables between two observation sets. If mode
|
|
is "TOP_N", then stats for the top N
|
|
dataframes
|
|
contain a subset of variables, then statistics for all variables will be returned, otherwise
|
|
only the top N vars will be returned.
|
|
:param obsFilter1: filter: dictionary with filter params for first set of observations
|
|
:param obsFilter2: filter: dictionary with filter params for second set of observations
|
|
:param top_n: Limit results to top N (Top var mode only)
|
|
:param interactive_limit: -- don't compute if total # genes in dataframes are larger than this
|
|
:return: top N genes and corresponding stats
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def layout_to_fbs_matrix(self, filter):
|
|
""" same as layout, except returns a flatbuffer """
|
|
pass
|