code: def is_dtype_equal(source, target) -> bool:
      """
      Check if two dtypes are equal.
  
      Parameters
      ----------
      source : The first dtype to compare
      target : The second dtype to compare
  
      Returns
      -------
      boolean
          Whether or not the two dtypes are equal.
  
      Examples
      --------
      >>> is_dtype_equal(int, float)
      False
      >>> is_dtype_equal("int", int)
      True
      >>> is_dtype_equal(object, "category")
      False
      >>> is_dtype_equal(CategoricalDtype(), "category")
      True
      >>> is_dtype_equal(DatetimeTZDtype(tz="UTC"), "datetime64")
      False
      """
      if isinstance(target, str):
          if not isinstance(source, str):
              # GH#38516 ensure we get the same behavior from
              #  is_dtype_equal(CDT, "category") and CDT == "category"
              try:
                  src = get_dtype(source)
                  if isinstance(src, ExtensionDtype):
                      return src == target
              except (TypeError, AttributeError, ImportError):
                  return False
      elif isinstance(source, str):
          return is_dtype_equal(target, source)
  
      try:
          source = get_dtype(source)
          target = get_dtype(target)
          return source == target
      except (TypeError, AttributeError, ImportError):
          # invalid comparison
          # object == category will hit this
          return False
  
imports: from __future__ import annotations
  from typing import Any, Callable
  import warnings
  import numpy
  from pandas._libs import Interval, Period, algos, lib
  from pandas._libs.tslibs import conversion
  from pandas._typing import ArrayLike, DtypeObj
  from pandas.core.dtypes.base import _registry
  from pandas.core.dtypes.dtypes import CategoricalDtype, DatetimeTZDtype, ExtensionDtype, IntervalDtype, PeriodDtype
  from pandas.core.dtypes.generic import ABCIndex
  from pandas.core.dtypes.inference import is_array_like, is_bool, is_complex, is_dataclass, is_decimal, is_dict_like, is_file_like, is_float, is_hashable, is_integer, is_interval, is_iterator, is_list_like, is_named_tuple, is_nested_list_like, is_number, is_re, is_re_compilable, is_scalar, is_sequence
label_desc: Use image node_id 17 for calling a global function with example usage: is_dtype_equal(source, target) and returns: unknown, is_dtype_equal, False, unknown, False