code: def test_rotation(self, batch_shape, device, dtype):
      # create input data
      batch_size, channels, height, width = batch_shape
      patch_src = torch.rand(
          batch_size,
          channels,
          height,
          width,
          device=device,
          dtype=dtype,
      )
      # rotation of 90deg
      dst_homo_src = torch.eye(3, device=device, dtype=dtype)
      dst_homo_src[..., 0, 0] = 0.0
      dst_homo_src[..., 0, 1] = 1.0
      dst_homo_src[..., 1, 0] = -1.0
      dst_homo_src[..., 1, 1] = 0.0
      dst_homo_src = dst_homo_src.expand(batch_size, -1, -1)
  
      # instantiate warper and warp from source to destination
      warper = kornia.geometry.transform.HomographyWarper(
          height, width, align_corners=True
      )
      patch_dst = warper(patch_src, dst_homo_src)
  
      # check the corners
      assert_close(
          patch_src[..., 0, 0],
          patch_dst[..., 0, -1],
          atol=1e-4,
          rtol=1e-4,
      )
      assert_close(
          patch_src[..., 0, -1],
          patch_dst[..., -1, -1],
          atol=1e-4,
          rtol=1e-4,
      )
      assert_close(
          patch_src[..., -1, 0],
          patch_dst[..., 0, 0],
          atol=1e-4,
          rtol=1e-4,
      )
      assert_close(
          patch_src[..., -1, -1],
          patch_dst[..., -1, 0],
          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 10 for calling the TestHomographyWarper obj's underlying member method code with example usage: obj.test_rotation(batch_shape, device, dtype) without return types