class_docstr: Find whether an expression can be replaced with an iterator.
code: def visit_Call(self, node):
      for i, arg in enumerate(node.args):
  
          def isReadOnce(f, i):
              return (
                  f in self.argument_read_once
                  and self.argument_read_once[f][i] <= 1
              )
  
          if all(
              isReadOnce(alias, i) for alias in self.aliases[node.func]
          ):
              self.result.add(arg)
      self.generic_visit(node)
  
file_path: catboost/contrib/python/pythran/pythran/analyses/potential_iterator.py
imports: from pythran.analyses.aliases import Aliases
  from pythran.analyses.argument_read_once import ArgumentReadOnce
  from pythran.passmanager import NodeAnalysis
  import gast
label_desc: Use image node_id 4 for calling the PotentialIterator obj's underlying member method code with example usage: obj.visit_Call(node) and returns: unknown