code: def batch_filter(self, Zs,update_first=False, saver=False):
          
  
          n = np.size(Zs, 0)
  
          # mean estimates from H-Infinity Filter
          means = zeros((n, self.dim_x, 1))
  
          # state covariances from H-Infinity Filter
          covariances = zeros((n, self.dim_x, self.dim_x))
  
          if update_first:
              for i, z in enumerate(Zs):
                  self.update(z)
                  means[i, :] = self.x
                  covariances[i, :, :] = self.P
                  self.predict()
  
                  if saver is not None:
                      saver.save()
          else:
              for i, z in enumerate(Zs):
                  self.predict()
                  self.update(z)
  
                  means[i, :] = self.x
                  covariances[i, :, :] = self.P
  
                  if saver is not None:
                      saver.save()
  
          return (means, covariances)
docs: Batch processes a sequences of measurements.
  
          Parameters
          ----------
          Zs : list-like
              list of measurements at each time step `self.dt` Missing
              measurements must be represented by 'None'.
  
          update_first : bool, default=False, optional,
              controls whether the order of operations is update followed by
              predict, or predict followed by update.
  
          saver : filterpy.common.Saver, optional
              filterpy.common.Saver object. If provided, saver.save() will be
              called after every epoch
  
          Returns
          -------
          means: ndarray ((n, dim_x, 1))
              array of the state for each time step. Each entry is an np.array.
              In other words `means[k,:]` is the state at step `k`.
  
          covariance: ndarray((n, dim_x, dim_x))
              array of the covariances for each time step. In other words
              `covariance[k, :, :]` is the covariance at step `k`.