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: Discrepancy between the measurement and its expected value.
  
  The linear error (observation - expected) is cast into the state's
  frame by rotation, following [BB2017]
  
  Parameters
  ----------
  state : array-like, shape=[dim]
      Vector representing the state.
  observation : array-like, shape=[dim_obs]
      Obtained measurement.
  
  Returns
  -------
  innovation : array-like, shape=[dim_obs]
      Error between the measurement and the expected value.
docstr_tok: ["Discrepancy","between","the","measurement","and","its","expected","value",".","The","linear","error","(","observation","-","expected",")","is","cast","into","the","state's","frame","by","rotation",",","following","[","BB2017","]","Parameters","--","--","--","--","--","state",":","array-like",",","shape=","[","dim","]","Vector","representing","the","state",".","observation",":","array-like",",","shape=","[","dim_obs","]","Obtained","measurement",".","Returns","--","--","--","-","innovation",":","array-like",",","shape=","[","dim_obs","]","Error","between","the","measurement","and","the","expected","value","."]
code: def innovation(self, state, observation):
      """Discrepancy between the measurement and its expected value.
  
      The linear error (observation - expected) is cast into the state's
      frame by rotation, following [BB2017]
  
      Parameters
      ----------
      state : array-like, shape=[dim]
          Vector representing the state.
      observation : array-like, shape=[dim_obs]
          Obtained measurement.
  
      Returns
      -------
      innovation : array-like, shape=[dim_obs]
          Error between the measurement and the expected value.
      """
      theta, _, _ = state
      rot = self.rotation_matrix(theta)
      expected = self.observation_model(state)
      return gs.matvec(Matrices.transpose(rot), observation - expected)
  
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 12 for calling the Localization obj's underlying member method code with example usage: obj.innovation(state, observation) and returns: gs