code: def test_transform3d_apply(self, device, dtype):
      depth, height, width = 3, 2, 5
      input = torch.tensor(
          [[0.0, 0.0, 0.0], [width - 1, height - 1, depth - 1]],
          device=device,
          dtype=dtype,
      )
      expected = torch.tensor(
          [[-1.0, -1.0, -1.0], [1.0, 1.0, 1.0]],
          device=device,
          dtype=dtype,
      )
      transform = kornia.geometry.conversions.normal_transform_pixel3d(
          depth, height, width, device=device, dtype=dtype
      )
      output = kornia.geometry.linalg.transform_points(transform, input)
      assert_close(
          output,
          expected.to(device=device, dtype=dtype),
          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 6 for calling the TestHomographyNormalTransform obj's underlying member method code with example usage: obj.test_transform3d_apply(device, dtype) without return types