class_docstr: Base class for analysis functionality.
  
  Provides basic functionality for state/args management in analysis hierarchy
  and helper method to access frequently-used methods.
  
  Analyses can be nested; the hierarchical relationships can be navigated via `parent` and `children` properties.
  
  The main entry method of analysis is `fit` function. This `_fit` method is designed to be overridden
  by the component developer and should encapsulate all the outputs into `state` object provided.
  When called, the execution flow is the following:
  - gather `args` from the parent levels of analysis hierarchy; this is done to avoid referencing same args on each
      nested component (i.e. `train_data` can be specified at the top and all the children will be able to access it
      via `args` on all levels (unless overridden by one of the components in the hierarchy)
  - call `_fit` function for each component that returned `True` from `can_handle` call
  
  Please note: `state` is shared across the whole analysis hierarchy. If two components change the same space, then
  it will be overridden by each consecutive update. If same component have to be reused and requires writing different
  outputs, please use :py:class:`~autogluon.eda.analysis.base.Namespace` wrapper to isolate the components.
  
  Parameters
  ----------
  parent: Optional[AbstractAnalysis], default = None
      parent Analysis
  children: Optional[List[AbstractAnalysis]], default None
      wrapped analyses; these will receive sampled `args` during `fit` call
  state: Optional[AnalysisState], default = None
      state object to perform check on; if not provided a new state will be created during the `fit` call
  kwargs
      arguments to pass into the component
  
  See Also
  --------
  :py:class:`~autogluon.eda.analysis.base.Namespace`
class_docstr_tok: ["Base","class","for","analysis","functionality",".","Provides","basic","functionality","for","state\/args","management","in","analysis","hierarchy","and","helper","method","to","access","frequently-used","methods",".","Analyses","can","be","nested",";","the","hierarchical","relationships","can","be","navigated","via","`","parent","`","and","`","children","`","properties",".","The","main","entry","method","of","analysis","is","`","fit","`","function",".","This","`","_fit","`","method","is","designed","to","be","overridden","by","the","component","developer","and","should","encapsulate","all","the","outputs","into","`","state","`","object","provided",".","When","called",",","the","execution","flow","is","the","following",":","-","gather","`","args","`","from","the","parent","levels","of","analysis","hierarchy",";","this","is","done","to","avoid","referencing","same","args","on","each","nested","component","(","i.e",".","`","train_data","`","can","be","specified","at","the","top","and","all","the","children","will","be","able","to","access","it","via","`","args","`","on","all","levels","(","unless","overridden","by","one","of","the","components","in","the","hierarchy",")","-","call","`","_fit","`","function","for","each","component","that","returned","`","True","`","from","`","can_handle","`","call","Please","note",":","`","state","`","is","shared","across","the","whole","analysis","hierarchy",".","If","two","components","change","the","same","space",",","then","it","will","be","overridden","by","each","consecutive","update",".","If","same","component","have","to","be","reused","and","requires","writing","different","outputs",",","please","use",":","py",":","class",":","`","~autogluon.eda.analysis.base.Namespace","`","wrapper","to","isolate","the","components",".","Parameters","--","--","--","--","--","parent",":","Optional","[","AbstractAnalysis","]",",","default","=","None","parent","Analysis","children",":","Optional","[","List","[","AbstractAnalysis","]","]",",","default","None","wrapped","analyses",";","these","will","receive","sampled","`","args","`","during","`","fit","`","call","state",":","Optional","[","AnalysisState","]",",","default","=","None","state","object","to","perform","check","on",";","if","not","provided","a","new","state","will","be","created","during","the","`","fit","`","call","kwargs","arguments","to","pass","into","the","component","See","Also","--","--","--","--",":","py",":","class",":","`","~autogluon.eda.analysis.base.Namespace","`"]
docstr: Fit the analysis tree.
  
  Parameters
  ----------
  kwargs
      fit arguments
  
  Returns
  -------
      state produced by fit
docstr_tok: ["Fit","the","analysis","tree",".","Parameters","--","--","--","--","--","kwargs","fit","arguments","Returns","--","--","--","-","state","produced","by","fit"]
code: def fit(self, **kwargs) -> AnalysisState:
      """
      Fit the analysis tree.
  
      Parameters
      ----------
      kwargs
          fit arguments
  
      Returns
      -------
          state produced by fit
  
      """
      self.state = self._get_state_from_parent()
      if self.parent is not None:
          assert (
              self.state is not None
          ), "Inner analysis fit() is called while parent has no state. Please call top-level analysis fit instead"
      _args = self._gather_args()
      if self.can_handle(self.state, _args):
          self._fit(self.state, _args, **kwargs)
          for c in self.children:
              c.fit(**kwargs)
      return self.state
  
imports: from __future__ import annotations
  import logging
  from abc import ABC, abstractmethod
  from typing import Dict, Generator, List, Optional, Tuple
  from pandas import DataFrame
  from ..state import AnalysisState, StateCheckMixin
label_desc: Use image node_id 7 for calling the AbstractAnalysis obj's underlying member method code with example usage: obj.fit() and returns: self