code: def predict(self, u=0):
          
  
          # x = Fx + Bu
  
          A = dot(self._F_inv.T, self.P_inv).dot(self._F_inv)
          #pylint: disable=bare-except
          try:
              AI = self.inv(A)
              invertable = True
              if self._no_information:
                  try:
                      self.x = dot(self.inv(self.P_inv), self.x)
                  except:
                      self.x = dot(0, self.x)
                  self._no_information = False
          except:
              invertable = False
              self._no_information = True
  
          if invertable:
              self.x = dot(self._F, self.x) + dot(self.B, u)
              self.P_inv = self.inv(AI + self.Q)
  
              # save priors
              self.P_inv_prior = np.copy(self.P_inv)
              self.x_prior = np.copy(self.x)
          else:
              I_PF = self._I - dot(self.P_inv, self._F_inv)
              FTI = self.inv(self._F.T)
              FTIX = dot(FTI, self.x)
              AQI = self.inv(A + self.Q)
              self.x = dot(FTI, dot(I_PF, AQI).dot(FTIX))
  
              # save priors
              self.x_prior = np.copy(self.x)
              self.P_inv_prior = np.copy(AQI)
docs: Predict next position.
  
          Parameters
          ----------
  
          u : ndarray
              Optional control vector. If non-zero, it is multiplied by B
              to create the control input into the system.