Source code for ebonite.core.analyzer.metric

from abc import abstractmethod

from ebonite.core.analyzer import Hook, analyzer_class
from ebonite.core.analyzer.base import LibHookMixin
from ebonite.core.objects.metric import CallableMetric, CallableMetricWrapper, LibFunctionMetric, Metric


[docs]class MetricHook(Hook): """ Base hook type for :class:`DatasetAnalyzer`. Analysis result is an instance of :class:`~ebonite.core.objects.DatasetType` """
[docs] @abstractmethod def process(self, obj, **kwargs) -> Metric: """ Analyzes obj and returns result. Result type is determined by specific Hook class sub-hierarchy :param obj: object to analyze :param kwargs: additional information to be used for analysis :return: analysis result """ pass # pragma: no cover
MetricAnalyzer = analyzer_class(MetricHook, Metric)
[docs]class LibFunctionMixin(MetricHook, LibHookMixin): invert = False default_args = {}
[docs] def get_args(self, obj): return self.default_args
[docs] def process(self, obj, **kwargs) -> Metric: return LibFunctionMetric(f'{obj.__module__}.{obj.__name__}', self.get_args(obj), invert_input=self.invert)
[docs]class CallableMetricHook(MetricHook):
[docs] def process(self, obj, **kwargs) -> Metric: return CallableMetric(CallableMetricWrapper.from_callable(obj))
[docs] def can_process(self, obj) -> bool: return callable(obj)
[docs] def must_process(self, obj) -> bool: return False