code: def numpy_aware_eq(a, b):
      
      if isinstance(a, np.ndarray) or isinstance(b, np.ndarray):
          return np.array_equal(a, b)
      if ((isinstance(a, Iterable) and isinstance(b, Iterable)) and
              not isinstance(a, str) and not isinstance(b, str)):
          if len(a) != len(b):
              return False
          return all(numpy_aware_eq(x, y) for x, y in zip(a, b))
      return a == b
docs: Return whether two objects are equal via recursion, using
      :func:`numpy.array_equal` for comparing numpy arays.