code: def test_safe_dtype_range_list(self, in_image, im_out, out_dtype):
      output_type = type(im_out[0])
      result = safe_dtype_range(in_image, dtype=out_dtype)
      # check type is unchanged
      self.assertEqual(type(result), type(im_out))
      # check output
      for i, _result in enumerate(result):
          assert_allclose(_result, im_out[i])
      # check dtype is unchanged
      if isinstance(in_image, (np.ndarray, torch.Tensor)):
          if out_dtype is None:
              self.assertEqual(result[0].dtype, im_out[0].dtype)
          else:
              _out_dtype = get_equivalent_dtype(out_dtype, output_type)
              self.assertEqual(result[0].dtype, _out_dtype)
  
file_path: MONAI/tests/test_safe_dtype_range.py
imports: from __future__ import annotations
  import unittest
  import numpy
  import torch
  from parameterized import parameterized
  from monai.utils import optional_import
  from monai.utils.type_conversion import get_equivalent_dtype, safe_dtype_range
  from tests.utils import HAS_CUPY, TEST_NDARRAYS_ALL, assert_allclose
label_desc: Use image node_id 2 for calling the TesSafeDtypeRange obj's underlying member method code with example usage: obj.test_safe_dtype_range_list(in_image, im_out, out_dtype) without return types