class_docstr: Associate each variable declaration with the node that defines it
  
  Whenever possible, associate the variable declaration to an assignment,
  otherwise to a node that defines a bloc (e.g. a For)
  This takes OpenMP information into accounts!
  The result is a dictionary with nodes as key and set of names as values
code: def __init__(self):
      self.result = defaultdict(set)
      self.decl_holders = (
          ast.FunctionDef,
          ast.For,
          ast.excepthandler,
          ast.While,
          ast.If,
          tuple,
      )
      super(Scope, self).__init__(AncestorsWithBody, DefUseChains)
  
file_path: catboost/contrib/python/pythran/pythran/analyses/scope.py
imports: from pythran.analyses.ancestors import AncestorsWithBody
  from pythran.analyses.use_def_chain import DefUseChains
  from pythran.passmanager import FunctionAnalysis
  from collections import defaultdict
  import gast
label_desc: Use image node_id 1 to create a new Scope object from inherited base classes: FunctionAnalysis with example: obj = Scope()