code: def is_extension_type(arr):
      
  
      if is_categorical(arr):
          return True
      elif is_sparse(arr):
          return True
      elif is_datetime64tz_dtype(arr):
          return True
      return False
docs: Check whether an array-like is of a pandas extension class instance.
  
      Extension classes include categoricals, pandas sparse objects (i.e.
      classes represented within the pandas library and not ones external
      to it like scipy sparse matrices), and datetime-like arrays.
  
      Parameters
      ----------
      arr : array-like
          The array-like to check.
  
      Returns
      -------
      boolean
          Whether or not the array-like is of a pandas extension class instance.
  
      Examples
      --------
      >>> is_extension_type([1, 2, 3])
      False
      >>> is_extension_type(np.array([1, 2, 3]))
      False
      >>>
      >>> cat = pd.Categorical([1, 2, 3])
      >>>
      >>> is_extension_type(cat)
      True
      >>> is_extension_type(pd.Series(cat))
      True
      >>> is_extension_type(pd.SparseArray([1, 2, 3]))
      True
      >>> is_extension_type(pd.SparseSeries([1, 2, 3]))
      True
      >>>
      >>> from scipy.sparse import bsr_matrix
      >>> is_extension_type(bsr_matrix([1, 2, 3]))
      False
      >>> is_extension_type(pd.DatetimeIndex([1, 2, 3]))
      False
      >>> is_extension_type(pd.DatetimeIndex([1, 2, 3], tz="US/Eastern"))
      True
      >>>
      >>> dtype = DatetimeTZDtype("ns", tz="US/Eastern")
      >>> s = pd.Series([], dtype=dtype)
      >>> is_extension_type(s)
      True