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: Converts elements of lie algebra to elements of lie group.
  
  See more: https://vision.in.tum.de/_media/members/demmeln/nurlanov2021so3log.pdf
  
  Args:
      v: vector of shape :math:`(B,3)`.
  
  Example:
      >>> v = torch.zeros((2, 3))
      >>> s = So3.exp(v)
      >>> s
      Parameter containing:
      tensor([[1., 0., 0., 0.],
              [1., 0., 0., 0.]], requires_grad=True)
docstr_tok: ["Converts","elements","of","lie","algebra","to","elements","of","lie","group",".","See","more",":","https",":","\/\/vision.in.tum.de\/_media\/members\/demmeln\/nurlanov2021so3log.pdf","Args",":","v",":","vector","of","shape",":","math",":","`","(","B,3",")","`",".","Example",":",">",">",">","v","=","torch.zeros","(","(","2",",","3",")",")",">",">",">","s","=","So3.exp","(","v",")",">",">",">","s","Parameter","containing",":","tensor","(","[","[","1.",",","0.",",","0.",",","0",".","]",",","[","1.",",","0.",",","0.",",","0",".","]","]",",","requires_grad=True",")"]
code: def exp(v: Tensor) -> So3:
      """Converts elements of lie algebra to elements of lie group.
  
      See more: https://vision.in.tum.de/_media/members/demmeln/nurlanov2021so3log.pdf
  
      Args:
          v: vector of shape :math:`(B,3)`.
  
      Example:
          >>> v = torch.zeros((2, 3))
          >>> s = So3.exp(v)
          >>> s
          Parameter containing:
          tensor([[1., 0., 0., 0.],
                  [1., 0., 0., 0.]], requires_grad=True)
      """
      # KORNIA_CHECK_SHAPE(v, ["B", "3"])  # FIXME: resolve shape bugs. @edgarriba
      theta = batched_dot_product(v, v).sqrt()[..., None]
      theta_nonzeros = theta != 0.0
      theta_half = 0.5 * theta
      # TODO: uncomment me after deprecate pytorch 10.2
      # w = where(theta_nonzeros, theta_half.cos(), 1.0)
      # b = where(theta_nonzeros, theta_half.sin() / theta, 0.0)
      w = where(
          theta_nonzeros,
          theta_half.cos(),
          tensor(1.0, device=v.device, dtype=v.dtype),
      )
      b = where(
          theta_nonzeros,
          theta_half.sin() / theta,
          tensor(0.0, device=v.device, dtype=v.dtype),
      )
      xyz = b * v
      return So3(Quaternion(concatenate((w, xyz), -1)))
  
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 6 for calling the So3 obj's underlying member method code with example usage: obj.exp(v) and returns: So3