class_docstr: Base class to represent the So3 group.
  
  The SO(3) is the group of all rotations about the origin of three-dimensional Euclidean space
  :math:`R^3` under the operation of composition.
  See more: https://en.wikipedia.org/wiki/3D_rotation_group
  
  We internally represent the rotation by a unit quaternion.
  
  Example:
      >>> q = Quaternion.identity()
      >>> s = So3(q)
      >>> s.q
      Parameter containing:
      tensor([1., 0., 0., 0.], requires_grad=True)
class_docstr_tok: ["Base","class","to","represent","the","So3","group",".","The","SO","(","3",")","is","the","group","of","all","rotations","about","the","origin","of","three-dimensional","Euclidean","space",":","math",":","`","R^3","`","under","the","operation","of","composition",".","See","more",":","https",":","\/\/en.wikipedia.org\/wiki\/3D_rotation_group","We","internally","represent","the","rotation","by","a","unit","quaternion",".","Example",":",">",">",">","q","=","Quaternion.identity","(",")",">",">",">","s","=","So3","(","q",")",">",">",">","s.q","Parameter","containing",":","tensor","(","[","1.",",","0.",",","0.",",","0",".","]",",","requires_grad=True",")"]
docstr: Computes the right Jacobian of So3.
  
  Args:
      vec: the input point of shape :math:`(B, 3)`.
  
  Example:
      >>> vec = torch.tensor([1., 2., 3.])
      >>> So3.right_jacobian(vec)
      tensor([[-0.0687,  0.5556, -0.0141],
              [-0.2267,  0.1779,  0.6236],
              [ 0.5074,  0.3629,  0.5890]])
docstr_tok: ["Computes","the","right","Jacobian","of","So3",".","Args",":","vec",":","the","input","point","of","shape",":","math",":","`","(","B",",","3",")","`",".","Example",":",">",">",">","vec","=","torch.tensor","(","[","1.",",","2.",",","3",".","]",")",">",">",">","So3.right_jacobian","(","vec",")","tensor","(","[","[","-0.0687",",","0.5556",",","-0.0141","]",",","[","-0.2267",",","0.1779",",","0.6236","]",",","[","0.5074",",","0.3629",",","0.5890","]","]",")"]
code: def right_jacobian(vec: Tensor) -> Tensor:
      """Computes the right Jacobian of So3.
  
      Args:
          vec: the input point of shape :math:`(B, 3)`.
  
      Example:
          >>> vec = torch.tensor([1., 2., 3.])
          >>> So3.right_jacobian(vec)
          tensor([[-0.0687,  0.5556, -0.0141],
                  [-0.2267,  0.1779,  0.6236],
                  [ 0.5074,  0.3629,  0.5890]])
      """
      # KORNIA_CHECK_SHAPE(vec, ["B", "3"])  # FIXME: resolve shape bugs. @edgarriba
      R_skew = vector_to_skew_symmetric_matrix(vec)
      theta = vec.norm(dim=-1, keepdim=True)[..., None]
      I = eye(3, device=vec.device, dtype=vec.dtype)  # noqa: E741
      Jr = (
          I
          - ((1 - theta.cos()) / theta**2) * R_skew
          + ((theta - theta.sin()) / theta**3) * (R_skew @ R_skew)
      )
      return Jr
  
imports: from __future__ import annotations
  from typing import Optional
  from kornia.core import Device, Dtype, Module, Tensor, concatenate, eye, stack, tensor, where, zeros, zeros_like
  from kornia.core.check import KORNIA_CHECK_TYPE
  from kornia.geometry.conversions import vector_to_skew_symmetric_matrix
  from kornia.geometry.linalg import batched_dot_product
  from kornia.geometry.quaternion import Quaternion
  from kornia.geometry.vector import Vector3
label_desc: Use image node_id 20 for calling the So3 obj's underlying member method code with example usage: obj.right_jacobian(vec) and returns: Jr