code: def test_mul_vec(self, device, dtype, batch_size):
      q1 = Quaternion.identity(batch_size, device, dtype)
      q2 = Quaternion.random(batch_size, device, dtype)
      if batch_size is None:
          shape = ()
      else:
          shape = (batch_size,)
      t = Vector3.random(shape, device, dtype)
      s1 = So3(q1)
      s2 = So3(q2)
      self.assert_close((s1 * s2).q.data, s2.q.data)
      self.assert_close((s2 * s2.inverse()).q.data, s1.q.data)
      self.assert_close((s1 * t), t)
  
imports: import pytest
  import torch
  from kornia.geometry.conversions import euler_from_quaternion
  from kornia.geometry.liegroup import So3
  from kornia.geometry.quaternion import Quaternion
  from kornia.geometry.vector import Vector3
  from kornia.testing import BaseTester
label_desc: Use image node_id 11 for calling the TestSo3 obj's underlying member method code with example usage: obj.test_mul_vec(device, dtype, batch_size) without return types