code: def assert_dtype_equal(self, fn, in_shapes, in_dtypes):
      inputs = [
          self.get_rand_tensor(s, d)
          for s, d in zip(in_shapes, in_dtypes)
      ]
      try:
          self.assert_dtype_equal_custom_args(fn, inputs)
      except Exception as e:
          fail_text = (
              f"Failed for shapes {in_shapes}, and dtypes {in_dtypes}"
          )
          raise AssertionError(fail_text) from e
  
imports: from itertools import product
  from typing import Tuple
  from unittest.case import expectedFailure
  import torch
  from torch import complex32, float32, float64, int32, int64
  from torch.jit._passes import _property_propagation
  from torch.testing._internal.common_methods_invocations import SampleInput, sample_inputs_adaptive_avg_pool2d, sample_inputs_conv2d
  from torch.testing._internal.common_utils import set_default_dtype, first_sample
  from torch.testing._internal.jit_utils import JitTestCase
  from torch.testing._internal.jit_metaprogramming_utils import create_traced_fn
  from torch.testing._internal.common_device_type import ops, instantiate_device_type_tests
  from torch.testing._internal.common_methods_invocations import op_db
label_desc: Use image node_id 6 for calling the TestDtypeBase obj's underlying member method code with example usage: obj.assert_dtype_equal(fn, in_shapes, in_dtypes) without return types