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 recursive_weight(self, function, index, predecessors):
      # TODO : Find out why it happens in some cases
      if len(function.read_effects) <= index:
          return 0
      if function.read_effects[index] == -1:
          # In case of recursive/cyclic calls
          cycle = function in predecessors
          predecessors.add(function)
          if cycle:
              function.read_effects[index] = 2 * function.dependencies(
                  ArgumentReadOnce.Context(
                      function, index, predecessors, False
                  )
              )
          else:
              function.read_effects[index] = function.dependencies(
                  ArgumentReadOnce.Context(
                      function, index, predecessors, True
                  )
              )
      return function.read_effects[index]
  
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 4 for calling the ArgumentReadOnce obj's underlying member method code with example usage: obj.recursive_weight(function, index, predecessors) and returns: function, int