class_docstr: Base class to represent the Se2 group.
  
  The SE(2) is the group of rigid body transformations about the origin of two-dimensional Euclidean
  space :math:`R^2` under the operation of composition.
  See more:
  
  Example:
      >>> so2 = So2.identity(1)
      >>> t = torch.ones((1, 2))
      >>> se2 = Se2(so2, t)
      >>> se2
      rotation: Parameter containing:
      tensor([1.+0.j], requires_grad=True)
      translation: Parameter containing:
      tensor([[1., 1.]], requires_grad=True)
class_docstr_tok: ["Base","class","to","represent","the","Se2","group",".","The","SE","(","2",")","is","the","group","of","rigid","body","transformations","about","the","origin","of","two-dimensional","Euclidean","space",":","math",":","`","R^2","`","under","the","operation","of","composition",".","See","more",":","Example",":",">",">",">","so2","=","So2.identity","(","1",")",">",">",">","t","=","torch.ones","(","(","1",",","2",")",")",">",">",">","se2","=","Se2","(","so2",",","t",")",">",">",">","se2","rotation",":","Parameter","containing",":","tensor","(","[","1.+0.j","]",",","requires_grad=True",")","translation",":","Parameter","containing",":","tensor","(","[","[","1.",",","1",".","]","]",",","requires_grad=True",")"]
docstr: Converts elements of lie group  to elements of lie algebra.
  
  Example:
      >>> v = torch.ones((1, 3))
      >>> s = Se2.exp(v).log()
      >>> s
      tensor([[1.0000, 1.0000, 1.0000]], grad_fn=<StackBackward0>)
docstr_tok: ["Converts","elements","of","lie","group","to","elements","of","lie","algebra",".","Example",":",">",">",">","v","=","torch.ones","(","(","1",",","3",")",")",">",">",">","s","=","Se2.exp","(","v",")",".log","(",")",">",">",">","s","tensor","(","[","[","1.0000",",","1.0000",",","1.0000","]","]",",","grad_fn=","<","StackBackward0",">",")"]
code: def log(self) -> Tensor:
      """Converts elements of lie group  to elements of lie algebra.
  
      Example:
          >>> v = torch.ones((1, 3))
          >>> s = Se2.exp(v).log()
          >>> s
          tensor([[1.0000, 1.0000, 1.0000]], grad_fn=<StackBackward0>)
      """
      theta = self.so2.log()
      half_theta = 0.5 * theta
      denom = self.so2.z.real - 1
      a = where(
          denom != 0,
          -(half_theta * self.so2.z.imag) / denom,
          tensor(0.0, device=theta.device, dtype=theta.dtype),
      )
      row0 = stack((a, half_theta), -1)
      row1 = stack((-half_theta, a), -1)
      V_inv = stack((row0, row1), -2)
      upsilon = V_inv @ self.t.data[..., None]
      return stack((upsilon[..., 0, 0], upsilon[..., 1, 0], theta), -1)
  
imports: from __future__ import annotations
  from typing import Optional, overload
  from kornia.core import Device, Dtype, Module, Parameter, Tensor, concatenate, pad, rand, stack, tensor, where, zeros_like
  from kornia.core.check import KORNIA_CHECK, KORNIA_CHECK_SAME_DEVICES, KORNIA_CHECK_TYPE
  from kornia.geometry.liegroup._utils import check_se2_omega_shape, check_se2_t_shape, check_v_shape
  from kornia.geometry.liegroup.so2 import So2
  from kornia.geometry.vector import Vector2
label_desc: Use image node_id 14 for calling the Se2 obj's underlying member method code with example usage: obj.log() and returns: stack