code: def test_mul(self, device, dtype, batch_size):
      s1 = So2.identity(batch_size, device, dtype)
      z = self._make_rand_data(device, dtype, (batch_size, 2))
      s2 = So2(torch.complex(z[..., 0], z[..., 1]))
      t1 = self._make_rand_data(device, dtype, (batch_size, 2))
      t2 = self._make_rand_data(device, dtype, (2,))
      s1_pose_s2 = s1 * s2
      s2_pose_s2 = s2 * s2.inverse()
      self.assert_close(s1_pose_s2.z.real, s2.z.real)
      self.assert_close(s1_pose_s2.z.imag, s2.z.imag)
      self.assert_close(s2_pose_s2.z.real, s1.z.real)
      self.assert_close(s2_pose_s2.z.imag, s1.z.imag)
      self.assert_close((s1 * t1), t1)
      self.assert_close(
          (So2.identity(device=device, dtype=dtype) * t2), t2
      )
  
imports: import pytest
  import torch
  from kornia.geometry.liegroup import So2
  from kornia.geometry.vector import Vector2
  from kornia.testing import BaseTester
label_desc: Use image node_id 11 for calling the TestSo2 obj's underlying member method code with example usage: obj.test_mul(device, dtype, batch_size) without return types