code: def test_projection(self, device, dtype):
      v0 = Vector3.from_coords(
          0.0, 0.0, 0.0, device=device, dtype=dtype
      )
      v1 = Vector3.from_coords(
          0.0, 1.0, 0.0, device=device, dtype=dtype
      )
      v2 = Vector3.from_coords(
          0.0, 0.0, 1.0, device=device, dtype=dtype
      )
      plane_in_world = Hyperplane.through(v0, v1, v2)
      p_in_world = Vector3.from_coords(
          0.0, 0.0, 1.0, device=device, dtype=dtype
      )
      p_in_plane = plane_in_world.projection(p_in_world)
      p_in_plane_expected = torch.tensor(
          [0.0, 0.0, 1.0], device=device, dtype=dtype
      )
      self.assert_close(p_in_plane, p_in_plane_expected)
  
imports: import pytest
  import torch
  from kornia.geometry.plane import Hyperplane, fit_plane
  from kornia.geometry.vector import Vector3
  from kornia.testing import BaseTester
label_desc: Use image node_id 5 for calling the TestHyperplane obj's underlying member method code with example usage: obj.test_projection(device, dtype) without return types