class_docstr: Interface for compute and visualization backends.
  
  Attributes:
      backends: A list of Python modules that may implement one
          or more compute or visualization backends. To be used by
          data-describe, the module must expose functions with the
          naming pattern `compute_FEATURE` or `viz_FEATURE` and register
          as a data-describe entrypoint. (See setup.py)dag
class_docstr_tok: ["Interface","for","compute","and","visualization","backends",".","Attributes",":","backends",":","A","list","of","Python","modules","that","may","implement","one","or","more","compute","or","visualization","backends",".","To","be","used","by","data-describe",",","the","module","must","expose","functions","with","the","naming","pattern","`","compute_FEATURE","`","or","`","viz_FEATURE","`","and","register","as","a","data-describe","entrypoint",".","(","See","setup.py",")","dag"]
docstr: Try to find the method implementation in the module list.
docstr_tok: ["Try","to","find","the","method","implementation","in","the","module","list","."]
code: def __getattr__(self, f: str):
      """Try to find the method implementation in the module list."""
      for module in object.__getattribute__(self, "backend_modules"):
          try:
              return module.__getattribute__(f)
          except AttributeError:
              pass
      raise NotImplementedError(
          f"Could not find implementation for {f} with available backends:"
          f" {object.__getattribute__(self, 'backend_modules')}"
      )
  
file_path: data-describe/data_describe/backends/_backends.py
imports: import importlib
  from types import ModuleType
  from typing import Dict, List, Optional
  from data_describe.config._config import get_option
  from data_describe.compat import _DATAFRAME_BACKENDS
label_desc: Use image node_id 2 for calling the _Backend obj's underlying member method code with example usage: obj.__getattr__(f) and returns: module