class_docstr: Base class to represent the Se3 group.
  
  The SE(3) is the group of rigid body transformations about the origin of three-dimensional Euclidean
  space :math:`R^3` under the operation of composition.
  See more: https://ingmec.ual.es/~jlblanco/papers/jlblanco2010geometry3D_techrep.pdf
  
  Example:
      >>> q = Quaternion.identity()
      >>> s = Se3(q, torch.ones(3))
      >>> s.r
      Parameter containing:
      tensor([1., 0., 0., 0.], requires_grad=True)
      >>> s.t
      Parameter containing:
      tensor([1., 1., 1.], requires_grad=True)
docstr: Constructor for the base class.
  
  Internally represented by a unit quaternion `q` and a translation 3-vector.
  
  Args:
      rotation: So3 group encompassing a rotation.
      translation: Vector3 or translation tensor with the shape of :math:`(B, 3)`.
  
  Example:
      >>> from kornia.geometry.quaternion import Quaternion
      >>> q = Quaternion.identity(batch_size=1)
      >>> s = Se3(q, torch.ones((1, 3)))
      >>> s.r
      Parameter containing:
      tensor([[1., 0., 0., 0.]], requires_grad=True)
      >>> s.t
      Parameter containing:
      tensor([[1., 1., 1.]], requires_grad=True)
code: def __init__(
      self, rotation: Quaternion | So3, translation: Vector3 | Tensor
  ) -> None:
      """Constructor for the base class.
  
      Internally represented by a unit quaternion `q` and a translation 3-vector.
  
      Args:
          rotation: So3 group encompassing a rotation.
          translation: Vector3 or translation tensor with the shape of :math:`(B, 3)`.
  
      Example:
          >>> from kornia.geometry.quaternion import Quaternion
          >>> q = Quaternion.identity(batch_size=1)
          >>> s = Se3(q, torch.ones((1, 3)))
          >>> s.r
          Parameter containing:
          tensor([[1., 0., 0., 0.]], requires_grad=True)
          >>> s.t
          Parameter containing:
          tensor([[1., 1., 1.]], requires_grad=True)
      """
      super().__init__()
      # KORNIA_CHECK_TYPE(rotation, (Quaternion, So3))
      if not isinstance(rotation, (Quaternion, So3)):
          raise TypeError(f"rotation type is {type(rotation)}")
      # KORNIA_CHECK_TYPE(translation, (Vector3, Tensor))
      if not isinstance(translation, (Vector3, Tensor)):
          raise TypeError(f"translation type is {type(translation)}")
      # KORNIA_CHECK_SHAPE(t, ["B", "3"])  # FIXME: resolve shape bugs. @edgarriba
      self._translation: Vector3 | Parameter
      self._rotation: So3
      if isinstance(translation, Tensor):
          self._translation = Parameter(translation)
      else:
          self._translation = translation
      if isinstance(rotation, Quaternion):
          self._rotation = So3(rotation)
      else:
          self._rotation = rotation
  
imports: from __future__ import annotations
  from typing import Optional
  from kornia.core import Device, Dtype, Module, Parameter, Tensor, concatenate, eye, pad, stack, tensor, where, zeros_like
  from kornia.core.check import KORNIA_CHECK, KORNIA_CHECK_SAME_DEVICES
  from kornia.geometry.liegroup.so3 import So3
  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 1 to create a new Se3 object from inherited base classes: Module with example: obj = Se3(rotation, translation)