code: def eref(obj, key, is_assoc=None):
      
      if obj is None:
          return None
      if isinstance(key, int) or (is_assoc is not None and is_assoc):
          return ElemRefArr, get_elem(obj), key
      else:
          return ElemRefObj, get_elem(obj), key
docs: Returns element reference
      :param obj:
      :param key:
      :param is_assoc:
      :return: