code: def test_mul(self, device, dtype, batch_size):
      s1 = Se2.identity(batch_size, device, dtype)
      s2 = Se2.random(batch_size, device, dtype)
      s1_pose_s2 = s1 * s2
      s2_pose_s2 = s2 * s2.inverse()
      zeros_vec = torch.zeros(2, device=device, dtype=dtype)
      if batch_size is not None:
          zeros_vec = zeros_vec.repeat(batch_size, 1)
      so2_expected = So2.identity(batch_size, device, dtype)
      self.assert_close(s1_pose_s2.r.z, s2.r.z)
      self.assert_close(s1_pose_s2.t, s2.t)
      self.assert_close(s2_pose_s2.r.z.real, so2_expected.z.real)
      self.assert_close(s2_pose_s2.r.z.imag, so2_expected.z.imag)
      self.assert_close(s2_pose_s2.t, zeros_vec)
  
imports: import pytest
  import torch
  from kornia.geometry.liegroup import Se2, So2
  from kornia.geometry.vector import Vector2
  from kornia.testing import BaseTester
label_desc: Use image node_id 10 for calling the TestSe2 obj's underlying member method code with example usage: obj.test_mul(device, dtype, batch_size) without return types