code: def test_batch(
      self, batch_size, num_channels, out_shape, device, dtype
  ):
      B, C = batch_size, num_channels
      sample = torch.rand(B, C, 3, 4, 5, device=device, dtype=dtype)
      P = torch.rand(B, 3, 4, device=device, dtype=dtype)
      output = proj.warp_affine3d(sample, P, out_shape)
      assert list(output.shape) == [B, C, *list(out_shape)]
  
imports: import pytest
  import torch
  from torch.autograd import gradcheck
  import kornia
  import kornia.geometry.transform
  import kornia.testing
  from kornia.testing import assert_close
  from kornia.utils.helpers import _torch_inverse_cast
label_desc: Use image node_id 2 for calling the TestWarpAffine3d obj's underlying member method code with example usage: obj.test_batch(batch_size, num_channels, out_shape, device, dtype) without return types