class_docstr: RecursiveAttr class to catch all attributes corresponding to numpy,
  when user calls fallback_mode. numpy is an instance of this class.
docstr: Catches attributes corresponding to numpy.
  
  Runs recursively till attribute gets called.
  Or numpy ScalarType is retrieved.
  
  Args:
      attr (str): Attribute of _RecursiveAttr class object.
  
  Returns:
      (_RecursiveAttr object, NumPy scalar):
          Returns_RecursiveAttr object with new numpy_object,
          cupy_object. OR
          Returns objects in cupy which is an alias
          of numpy object. OR
          Returns wrapper objects, `ndarray`, `vectorize`.
docstr_tok: ["Catches","attributes","corresponding","to","numpy",".","Runs","recursively","till","attribute","gets","called",".","Or","numpy","ScalarType","is","retrieved",".","Args",":","attr","(","str",")",":","Attribute","of","_RecursiveAttr","class","object",".","Returns",":","(","_RecursiveAttr","object",",","NumPy","scalar",")",":","Returns_RecursiveAttr","object","with","new","numpy_object",",","cupy_object",".","OR","Returns","objects","in","cupy","which","is","an","alias","of","numpy","object",".","OR","Returns","wrapper","objects",",","`","ndarray","`",",","`","vectorize","`","."]
code: def __getattr__(self, attr):
      """
      Catches attributes corresponding to numpy.
  
      Runs recursively till attribute gets called.
      Or numpy ScalarType is retrieved.
  
      Args:
          attr (str): Attribute of _RecursiveAttr class object.
  
      Returns:
          (_RecursiveAttr object, NumPy scalar):
              Returns_RecursiveAttr object with new numpy_object,
              cupy_object. OR
              Returns objects in cupy which is an alias
              of numpy object. OR
              Returns wrapper objects, `ndarray`, `vectorize`.
      """
  
      numpy_object = getattr(self._numpy_object, attr)
      cupy_object = getattr(self._cupy_object, attr, None)
  
      if numpy_object is np.ndarray:
          return ndarray
  
      if numpy_object is np.vectorize:
          return vectorize
  
      if numpy_object is cupy_object:
          return numpy_object
  
      return _RecursiveAttr(numpy_object, cupy_object)
  
imports: import types
  import numpy
  import cupy
  from cupyx.fallback_mode import notification
label_desc: Use image node_id 3 for calling the _RecursiveAttr obj's underlying member method code with example usage: obj.__getattr__(attr) and returns: _RecursiveAttr, ndarray, vectorize, numpy_object