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 from vector space to lie algebra. Returns matrix of shape :math:`(B,3,3)`.
  
  Args:
      v: Vector3 or tensor of shape :math:`(B,3)`.
  
  Example:
      >>> v = torch.ones((1,3))
      >>> m = So3.hat(v)
      >>> m
      tensor([[[ 0., -1.,  1.],
               [ 1.,  0., -1.],
               [-1.,  1.,  0.]]])
docstr_tok: ["Converts","elements","from","vector","space","to","lie","algebra",".","Returns","matrix","of","shape",":","math",":","`","(","B,3,3",")","`",".","Args",":","v",":","Vector3","or","tensor","of","shape",":","math",":","`","(","B,3",")","`",".","Example",":",">",">",">","v","=","torch.ones","(","(","1,3",")",")",">",">",">","m","=","So3.hat","(","v",")",">",">",">","m","tensor","(","[","[","[","0.",",","-1.",",","1",".","]",",","[","1.",",","0.",",","-1",".","]",",","[","-1.",",","1.",",","0",".","]","]","]",")"]
code: def hat(v: Vector3 | Tensor) -> Tensor:
      """Converts elements from vector space to lie algebra. Returns matrix of shape :math:`(B,3,3)`.
  
      Args:
          v: Vector3 or tensor of shape :math:`(B,3)`.
  
      Example:
          >>> v = torch.ones((1,3))
          >>> m = So3.hat(v)
          >>> m
          tensor([[[ 0., -1.,  1.],
                   [ 1.,  0., -1.],
                   [-1.,  1.,  0.]]])
      """
      # KORNIA_CHECK_SHAPE(v, ["B", "3"])  # FIXME: resolve shape bugs. @edgarriba
      if isinstance(v, Tensor):
          # TODO: Figure out why mypy think `v` can be a Vector3 which didn't allow ellipsis on index
          a, b, c = v[..., 0], v[..., 1], v[..., 2]  # type: ignore[index]
      else:
          a, b, c = v.x, v.y, v.z
      z = zeros_like(a)
      row0 = stack((z, -c, b), -1)
      row1 = stack((c, z, -a), -1)
      row2 = stack((-b, a, z), -1)
      return stack((row0, row1, row2), -2)
  
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 8 for calling the So3 obj's underlying member method code with example usage: obj.hat(v) and returns: stack