parameters: (self, name, redefined)
docstring: Increment the internal count of how many times a variable is being
          defined. Most variables in Numba IR are SSA, i.e., defined only once,
          but not all of them. When a variable is being re-defined, it must
          be removed from the equivalence relation and added to the redefined
          set but only if that redefinition is not known to have the same
          equivalence classes. Those variables redefined are removed from all
          the blocks' equivalence sets later.
  
          Arrays passed to define() use their whole name but these do not
          appear in the equivalence sets since they are stored there per
          dimension. Calling _get_names() here converts array names to
          dimensional names.
  
          This function would previously invalidate if there were any multiple
          definitions of a variable.  However, we realized that this behavior
          is overly restrictive.  You need only invalidate on multiple
          definitions if they are not known to be equivalent. So, the
          equivalence insertion functions now return True if some change was
          made (meaning the definition was not equivalent) and False
          otherwise. If no change was made, then define() need not be
          called. For no change to have been made, the variable must
          already be present. If the new definition of the var has the
          case where lhs and rhs are in the same equivalence class then
          again, no change will be made and define() need not be called
          or the variable invalidated.
docstring_summary: Increment the internal count of how many times a variable is being
          defined. Most variables in Numba IR are SSA, i.e., defined only once,
          but not all of them. When a variable is being re-defined, it must
          be removed from the equivalence relation and added to the redefined
          set but only if that redefinition is not known to have the same
          equivalence classes. Those variables redefined are removed from all
          the blocks' equivalence sets later.
docstring_tokens: Increment the internal count of how many times a variable is being defined . Most variables in Numba IR are SSA i . e . defined only once but not all of them . When a variable is being re - defined it must be removed from the equivalence relation and added to the redefined set but only if that redefinition is not known to have the same equivalence classes . Those variables redefined are removed from all the blocks equivalence sets later .
function: def define(self, name, redefined):
          """Increment the internal count of how many times a variable is being
          defined. Most variables in Numba IR are SSA, i.e., defined only once,
          but not all of them. When a variable is being re-defined, it must
          be removed from the equivalence relation and added to the redefined
          set but only if that redefinition is not known to have the same
          equivalence classes. Those variables redefined are removed from all
          the blocks' equivalence sets later.
  
          Arrays passed to define() use their whole name but these do not
          appear in the equivalence sets since they are stored there per
          dimension. Calling _get_names() here converts array names to
          dimensional names.
  
          This function would previously invalidate if there were any multiple
          definitions of a variable.  However, we realized that this behavior
          is overly restrictive.  You need only invalidate on multiple
          definitions if they are not known to be equivalent. So, the
          equivalence insertion functions now return True if some change was
          made (meaning the definition was not equivalent) and False
          otherwise. If no change was made, then define() need not be
          called. For no change to have been made, the variable must
          already be present. If the new definition of the var has the
          case where lhs and rhs are in the same equivalence class then
          again, no change will be made and define() need not be called
          or the variable invalidated.
          """
          if isinstance(name, ir.Var):
              name = name.name
          if name in self.defs:
              self.defs[name] += 1
              name_res = list(self._get_names(name))
              for one_name in name_res:
                  # NOTE: variable being redefined, must invalidate previous
                  # equivalences. Believe it is a rare case, and only happens to
                  # scalar accumuators.
                  if one_name in self.obj_to_ind:
                      redefined.add(one_name) # remove this var from all equiv sets
                      i = self.obj_to_ind[one_name]
                      del self.obj_to_ind[one_name]
                      self.ind_to_obj[i].remove(one_name)
                      if self.ind_to_obj[i] == []:
                          del self.ind_to_obj[i]
                      assert(i in self.ind_to_var)
                      names = [x.name for x in self.ind_to_var[i]]
                      if name in names:
                          j = names.index(name)
                          del self.ind_to_var[i][j]
                          if self.ind_to_var[i] == []:
                              del self.ind_to_var[i]
                              # no more size variables, remove equivalence too
                              if i in self.ind_to_obj:
                                  for obj in self.ind_to_obj[i]:
                                      del self.obj_to_ind[obj]
                                  del self.ind_to_obj[i]
          else:
              self.defs[name] = 1
function_tokens: def define ( self , name , redefined ) : if isinstance ( name , ir . Var ) : name = name . name if name in self . defs : self . defs [ name ] += 1 name_res = list ( self . _get_names ( name ) ) for one_name in name_res : # NOTE: variable being redefined, must invalidate previous # equivalences. Believe it is a rare case, and only happens to # scalar accumuators. if one_name in self . obj_to_ind : redefined . add ( one_name ) # remove this var from all equiv sets i = self . obj_to_ind [ one_name ] del self . obj_to_ind [ one_name ] self . ind_to_obj [ i ] . remove ( one_name ) if self . ind_to_obj [ i ] == [ ] : del self . ind_to_obj [ i ] assert ( i in self . ind_to_var ) names = [ x . name for x in self . ind_to_var [ i ] ] if name in names : j = names . index ( name ) del self . ind_to_var [ i ] [ j ] if self . ind_to_var [ i ] == [ ] : del self . ind_to_var [ i ] # no more size variables, remove equivalence too if i in self . ind_to_obj : for obj in self . ind_to_obj [ i ] : del self . obj_to_ind [ obj ] del self . ind_to_obj [ i ] else : self . defs [ name ] = 1