class_docstr: RecursiveAttr class to catch all attributes corresponding to numpy,
  when user calls fallback_mode. numpy is an instance of this class.
docstr: Gets invoked when last attribute of _RecursiveAttr class gets called.
  Calls _cupy_object if not None else call _numpy_object.
  
  Args:
      args (tuple): Arguments.
      kwargs (dict): Keyword arguments.
  
  Returns:
      (res, ndarray): Returns of methods call_cupy or call_numpy
docstr_tok: ["Gets","invoked","when","last","attribute","of","_RecursiveAttr","class","gets","called",".","Calls","_cupy_object","if","not","None","else","call","_numpy_object",".","Args",":","args","(","tuple",")",":","Arguments",".","kwargs","(","dict",")",":","Keyword","arguments",".","Returns",":","(","res",",","ndarray",")",":","Returns","of","methods","call_cupy","or","call_numpy"]
code: def __call__(self, *args, **kwargs):
      """
      Gets invoked when last attribute of _RecursiveAttr class gets called.
      Calls _cupy_object if not None else call _numpy_object.
  
      Args:
          args (tuple): Arguments.
          kwargs (dict): Keyword arguments.
  
      Returns:
          (res, ndarray): Returns of methods call_cupy or call_numpy
      """
  
      if not callable(self._numpy_object):
          raise TypeError(
              "'{}' object is not callable".format(
                  type(self._numpy_object).__name__
              )
          )
  
      # _RecursiveAttr gets called from ndarray
      if self._fallback_array is not None:
          args = (self._fallback_array,) + args
  
      if (
          self._cupy_object is not None
          and _RecursiveAttr._is_cupy_compatible((args, kwargs))
      ):
          try:
              return _call_cupy(self._cupy_object, args, kwargs)
          except Exception:
              return _call_numpy(self._numpy_object, args, kwargs)
  
      notification._dispatch_notification(self._numpy_object)
      return _call_numpy(self._numpy_object, args, kwargs)
  
imports: import types
  import numpy
  import cupy
  from cupyx.fallback_mode import notification
label_desc: Use image node_id 7 for calling the _RecursiveAttr obj's underlying member method code with example usage: obj.__call__() and returns: _call_numpy, _call_cupy, _call_numpy