class_docstr: Class for modeling a non-linear 2D localization problem.
  
  The state is composed of a planar orientation and position, and is thus a
  member of SE(2).
  A sensor provides the linear and angular speed, while another one provides
  sparse position observations.
docstr: Propagate state with constant velocity motion model on SE(2).
  
  From a given state (orientation, position) pair :math:`(\theta, x)`,
  a new one is obtained as :math:`(\theta + dt * \omega,
  x + dt * R(\theta) u)`, where the time step, the linear and angular
  velocities u and :math:\omega are given some sensor (e.g., odometers).
  
  Parameters
  ----------
  state : array-like, shape=[dim]
      Vector representing a state (orientation, position).
  sensor_input : array-like, shape=[4]
      Vector representing the information from the sensor.
  
  Returns
  -------
  new_state : array-like, shape=[dim]
      Vector representing the propagated state.
docstr_tok: ["Propagate","state","with","constant","velocity","motion","model","on","SE","(","2",")",".","From","a","given","state","(","orientation",",","position",")","pair",":","math",":","`","(","\\theta",",","x",")","`",",","a","new","one","is","obtained","as",":","math",":","`","(","\\theta","+","dt","*","\\omega",",","x","+","dt","*","R","(","\\theta",")","u",")","`",",","where","the","time","step",",","the","linear","and","angular","velocities","u","and",":","math",":","\\omega","are","given","some","sensor","(","e.g.",",","odometers",")",".","Parameters","--","--","--","--","--","state",":","array-like",",","shape=","[","dim","]","Vector","representing","a","state","(","orientation",",","position",")",".","sensor_input",":","array-like",",","shape=","[","4","]","Vector","representing","the","information","from","the","sensor",".","Returns","--","--","--","-","new_state",":","array-like",",","shape=","[","dim","]","Vector","representing","the","propagated","state","."]
code: def propagate(self, state, sensor_input):
      r"""Propagate state with constant velocity motion model on SE(2).
  
      From a given state (orientation, position) pair :math:`(\theta, x)`,
      a new one is obtained as :math:`(\theta + dt * \omega,
      x + dt * R(\theta) u)`, where the time step, the linear and angular
      velocities u and :math:\omega are given some sensor (e.g., odometers).
  
      Parameters
      ----------
      state : array-like, shape=[dim]
          Vector representing a state (orientation, position).
      sensor_input : array-like, shape=[4]
          Vector representing the information from the sensor.
  
      Returns
      -------
      new_state : array-like, shape=[dim]
          Vector representing the propagated state.
      """
      dt, linear_vel, angular_vel = self.preprocess_input(sensor_input)
      theta, _, _ = state
      local_vel = gs.matvec(self.rotation_matrix(theta), linear_vel)
      new_pos = state[1:] + dt * local_vel
      theta = theta + dt * angular_vel
      theta = self.regularize_angle(theta)
      return gs.concatenate((theta, new_pos), axis=0)
  
imports: import geomstats.backend
  from geomstats.geometry.euclidean import Euclidean
  from geomstats.geometry.matrices import Matrices
  from geomstats.geometry.special_euclidean import SpecialEuclidean
label_desc: Use image node_id 6 for calling the Localization obj's underlying member method code with example usage: obj.propagate(state, sensor_input) and returns: gs