Source code for autogluon.eda.visualization.base

import logging
from abc import ABC, abstractmethod
from typing import List, Optional

from ..state import AnalysisState, StateCheckMixin

logger = logging.getLogger(__name__)


[docs]class AbstractVisualization(ABC, StateCheckMixin): """ Base class for visualization functionality. Provides basic functionality for namespace management and helper method to access frequently-used methods. Specifying namespace would narrow visibility scope to specific subspace of `state`. Namespaces can be specified in a nested form: `ns_a.ns_b.ns_c`. Please see :py:class:`~autogluon.eda.analysis.base.Namespace` wrapper on how to create namespaces. The main entry method of analysis is `render` function. When called, the execution flow is the following: - narrow `state` scope to specified `namespace` - call `_render` function for each component that returned `True` from `can_handle` call Parameters ---------- namespace: str namespace to use; can be nested like `ns_a.ns_b.ns_c` kwargs See Also -------- :py:class:`~autogluon.eda.analysis.base.Namespace` """ def __init__(self, namespace: Optional[str] = None, **kwargs) -> None: super().__init__() self.namespace: List[str] = [] self._kwargs = kwargs if namespace is not None: self.namespace = namespace.split(".") def _get_namespace_state(self, state): if self.namespace is not None: for k in self.namespace: state = state[k] return state
[docs] @abstractmethod def can_handle(self, state: AnalysisState) -> bool: """ Checks if state has all the required parameters for visualization. See also :func:`at_least_one_key_must_be_present` and :func:`all_keys_must_be_present` helpers to construct more complex logic. Parameters ---------- state: AnalysisState fitted state Returns ------- `True` if all the pre-requisites for rendering are present """ raise NotImplementedError
@abstractmethod def _render(self, state: AnalysisState) -> None: """ @override Component-specific rendering logic. This method is designed to be overridden by the component developer. Parameters ---------- state Returns ------- """ raise NotImplementedError
[docs] def render(self, state: AnalysisState) -> None: """ Render component. Parameters ---------- state: AnalysisState state to render """ state = self._get_namespace_state(state) if self.can_handle(state): self._render(state)