code: def test_denormalize_homography_identity(
      self, batch_size, device, dtype
  ):
      # create input data
      height, width = 2, 5
      dst_homo_src = utils.create_eye_batch(
          batch_size=batch_size, eye_size=3, device=device, dtype=dtype
      )
  
      res = torch.tensor(
          [[[0.5, 0.0, -1.0], [0.0, 2.0, -1.0], [0.0, 0.0, 1.0]]],
          device=device,
          dtype=dtype,
      )
      assert_close(
          kornia.geometry.conversions.normal_transform_pixel(
              height, width, device=device, dtype=dtype
          ),
          res,
      )
  
      denorm_homo = kornia.geometry.conversions.denormalize_homography(
          dst_homo_src, (height, width), (height, width)
      )
      assert_close(denorm_homo, dst_homo_src)
  
      # change output scale
      denorm_homo = kornia.geometry.conversions.denormalize_homography(
          dst_homo_src, (height, width), (height * 2, width // 2)
      )
      res = torch.tensor(
          [[[0.25, 0.0, 0.0], [0.0, 3.0, 0], [0.0, 0.0, 1.0]]],
          device=device,
          dtype=dtype,
      ).repeat(batch_size, 1, 1)
      assert_close(denorm_homo, res, atol=1e-4, rtol=1e-4)
  
imports: import pytest
  import torch
  from torch.autograd import gradcheck
  import kornia
  import kornia.testing
  from kornia.testing import assert_close
  from kornia.utils.helpers import _torch_inverse_cast
label_desc: Use image node_id 3 for calling the TestHomographyWarper obj's underlying member method code with example usage: obj.test_denormalize_homography_identity(batch_size, device, dtype) without return types