class_docstr: Counts the usages of each argument of each function.
  
  Attributes
  ----------
  result : {FunctionEffects}
      Number of use for each argument of each function.
  node_to_functioneffect : {???: ???}
      FunctionDef ast node to function effect binding.
class_docstr_tok: ["Counts","the","usages","of","each","argument","of","each","function",".","Attributes","--","--","--","--","--","result",":","{","FunctionEffects","}","Number","of","use","for","each","argument","of","each","function",".","node_to_functioneffect",":","{","?","?","?",":","?","?","?","}","FunctionDef","ast","node","to","function","effect","binding","."]
code: def visit_Call(self, node):
      l0 = self.generic_visit(node)
      index_corres = dict()
      func = None
      for i, arg in enumerate(node.args):
          n = self.argument_index(arg)
          if n >= 0:
              func_aliases = self.aliases[node.func]
  
              # expand argument if any
              func_aliases = reduce(
                  lambda x, y: x
                  + (
                      # all functions
                      list(self.node_to_functioneffect.keys())
                      if (
                          isinstance(y, ast.Name)
                          and self.argument_index(y) >= 0
                      )
                      else [y]
                  ),
                  func_aliases,
                  list(),
              )
  
              for func_alias in func_aliases:
                  # special hook for binded functions
                  if isinstance(func_alias, ast.Call):
                      bound_name = func_alias.args[0].id
                      func_alias = self.global_declarations[bound_name]
  
                  if func_alias is intrinsic.UnboundValue:
                      continue
  
                  if func_alias not in self.node_to_functioneffect:
                      continue
  
                  func = self.node_to_functioneffect[func_alias]
                  index_corres[n] = i
  
      def merger(ctx):
          base = l0(ctx)
          if (ctx.index in index_corres) and ctx.global_dependencies:
              rec = self.recursive_weight(
                  func, index_corres[ctx.index], ctx.path
              )
          else:
              rec = 0
          return base + rec
  
      return merger
  
imports: from pythran.analyses.aliases import Aliases
  from pythran.analyses.global_declarations import GlobalDeclarations
  from pythran.passmanager import ModuleAnalysis
  from pythran.tables import MODULES
  import pythran.intrinsic
  import gast
  from functools import reduce
label_desc: Use image node_id 15 for calling the ArgumentReadOnce obj's underlying member method code with example usage: obj.visit_Call(node) and returns: merger, unknown