class_docstr: Generates sigma points and weights according to the simplex
  method presented in [1].
  
  Parameters
  ----------
  
  n : int
      Dimensionality of the state. n+1 weights will be generated.
  
  sqrt_method : function(ndarray), default=scipy.linalg.cholesky
      Defines how we compute the square root of a matrix, which has
      no unique answer. Cholesky is the default choice due to its
      speed. Typically your alternative choice will be
      scipy.linalg.sqrtm
  
      If your method returns a triangular matrix it must be upper
      triangular. Do not use numpy.linalg.cholesky - for historical
      reasons it returns a lower triangular matrix. The SciPy version
      does the right thing.
  
  subtract : callable (x, y), optional
      Function that computes the difference between x and y.
      You will have to supply this if your state variable cannot support
      subtraction, such as angles (359-1 degreees is 2, not 358). x and y
      are state vectors, not scalars.
  
  Attributes
  ----------
  
  Wm : np.array
      weight for each sigma point for the mean
  
  Wc : np.array
      weight for each sigma point for the covariance
  
  References
  ----------
  
  .. [1] Phillippe Moireau and Dominique Chapelle "Reduced-Order
         Unscented Kalman Filtering with Application to Parameter
         Identification in Large-Dimensional Systems"
         DOI: 10.1051/cocv/2010006
class_docstr_tok: ["Generates","sigma","points","and","weights","according","to","the","simplex","method","presented","in","[","1","]",".","Parameters","--","--","--","--","--","n",":","int","Dimensionality","of","the","state",".","n+1","weights","will","be","generated",".","sqrt_method",":","function","(","ndarray",")",",","default=scipy.linalg.cholesky","Defines","how","we","compute","the","square","root","of","a","matrix",",","which","has","no","unique","answer",".","Cholesky","is","the","default","choice","due","to","its","speed",".","Typically","your","alternative","choice","will","be","scipy.linalg.sqrtm","If","your","method","returns","a","triangular","matrix","it","must","be","upper","triangular",".","Do","not","use","numpy.linalg.cholesky","-","for","historical","reasons","it","returns","a","lower","triangular","matrix",".","The","SciPy","version","does","the","right","thing",".","subtract",":","callable","(","x",",","y",")",",","optional","Function","that","computes","the","difference","between","x","and","y",".","You","will","have","to","supply","this","if","your","state","variable","can","not","support","subtraction",",","such","as","angles","(","359-1","degreees","is","2",",","not","358",")",".","x","and","y","are","state","vectors",",","not","scalars",".","Attributes","--","--","--","--","--","Wm",":","np.array","weight","for","each","sigma","point","for","the","mean","Wc",":","np.array","weight","for","each","sigma","point","for","the","covariance","References","--","--","--","--","--","..","[","1","]","Phillippe","Moireau","and","Dominique","Chapelle","``","Reduced-Order","Unscented","Kalman","Filtering","with","Application","to","Parameter","Identification","in","Large-Dimensional","Systems","''","DOI",":","10.1051\/cocv\/2010006"]
docstr: Computes the implex sigma points for an unscented Kalman filter
  given the mean (x) and covariance(P) of the filter.
  Returns tuple of the sigma points and weights.
  
  Works with both scalar and array inputs:
  sigma_points (5, 9, 2) # mean 5, covariance 9
  sigma_points ([5, 2], 9*eye(2), 2) # means 5 and 2, covariance 9I
  
  Parameters
  ----------
  
  x : An array-like object of the means of length n
      Can be a scalar if 1D.
      examples: 1, [1,2], np.array([1,2])
  
  P : scalar, or np.array
     Covariance of the filter. If scalar, is treated as eye(n)*P.
  
  Returns
  -------
  
  sigmas : np.array, of size (n+1, n)
      Two dimensional array of sigma points. Each column contains all of
      the sigmas for one dimension in the problem space.
  
      Ordered by Xi_0, Xi_{1..n}
docstr_tok: ["Computes","the","implex","sigma","points","for","an","unscented","Kalman","filter","given","the","mean","(","x",")","and","covariance","(","P",")","of","the","filter",".","Returns","tuple","of","the","sigma","points","and","weights",".","Works","with","both","scalar","and","array","inputs",":","sigma_points","(","5",",","9",",","2",")","#","mean","5",",","covariance","9","sigma_points","(","[","5",",","2","]",",","9","*","eye","(","2",")",",","2",")","#","means","5","and","2",",","covariance","9I","Parameters","--","--","--","--","--","x",":","An","array-like","object","of","the","means","of","length","n","Can","be","a","scalar","if","1D",".","examples",":","1",",","[","1,2","]",",","np.array","(","[","1,2","]",")","P",":","scalar",",","or","np.array","Covariance","of","the","filter",".","If","scalar",",","is","treated","as","eye","(","n",")","*","P.","Returns","--","--","--","-","sigmas",":","np.array",",","of","size","(","n+1",",","n",")","Two","dimensional","array","of","sigma","points",".","Each","column","contains","all","of","the","sigmas","for","one","dimension","in","the","problem","space",".","Ordered","by","Xi_0",",","Xi_","{","1","..","n","}"]
code: def sigma_points(self, x, P):
      """
      Computes the implex sigma points for an unscented Kalman filter
      given the mean (x) and covariance(P) of the filter.
      Returns tuple of the sigma points and weights.
  
      Works with both scalar and array inputs:
      sigma_points (5, 9, 2) # mean 5, covariance 9
      sigma_points ([5, 2], 9*eye(2), 2) # means 5 and 2, covariance 9I
  
      Parameters
      ----------
  
      x : An array-like object of the means of length n
          Can be a scalar if 1D.
          examples: 1, [1,2], np.array([1,2])
  
      P : scalar, or np.array
         Covariance of the filter. If scalar, is treated as eye(n)*P.
  
      Returns
      -------
  
      sigmas : np.array, of size (n+1, n)
          Two dimensional array of sigma points. Each column contains all of
          the sigmas for one dimension in the problem space.
  
          Ordered by Xi_0, Xi_{1..n}
      """
  
      if self.n != np.size(x):
          raise ValueError(
              "expected size(x) {}, but size is {}".format(
                  self.n, np.size(x)
              )
          )
  
      n = self.n
  
      if np.isscalar(x):
          x = np.asarray([x])
      x = x.reshape(-1, 1)
  
      if np.isscalar(P):
          P = np.eye(n) * P
      else:
          P = np.atleast_2d(P)
  
      U = self.sqrt(P)
  
      lambda_ = n / (n + 1)
      Istar = np.array(
          [[-1 / np.sqrt(2 * lambda_), 1 / np.sqrt(2 * lambda_)]]
      )
  
      for d in range(2, n + 1):
          row = (
              np.ones((1, Istar.shape[1] + 1))
              * 1.0
              / np.sqrt(lambda_ * d * (d + 1))
          )  # pylint: disable=unsubscriptable-object
          row[0, -1] = -d / np.sqrt(lambda_ * d * (d + 1))
          Istar = np.r_[
              np.c_[Istar, np.zeros((Istar.shape[0]))], row
          ]  # pylint: disable=unsubscriptable-object
  
      I = np.sqrt(n) * Istar
      scaled_unitary = (U.T).dot(I)
  
      sigmas = self.subtract(x, -scaled_unitary)
      return sigmas.T
  
imports: from __future__ import division
  import numpy
  from scipy.linalg import cholesky
  from filterpy.common import pretty_str
label_desc: Use image node_id 3 for calling the SimplexSigmaPoints obj's underlying member method code with example usage: obj.sigma_points(x, P) and returns: sigmas