code: def test_procedural_batch_filter():
      f = KalmanFilter(dim_x=2, dim_z=1)
  
      f.x = np.array([2.0, 0])
  
      f.F = np.array([[1.0, 1.0], [0.0, 1.0]])
  
      f.H = np.array([[1.0, 0.0]])
      f.P = np.eye(2) * 1000.0
      f.R = np.eye(1) * 5
      f.Q = Q_discrete_white_noise(2, 1.0, 0.0001)
  
      f.test_matrix_dimensions()
  
      x = np.array([2.0, 0])
  
      F = np.array([[1.0, 1.0], [0.0, 1.0]])
  
      H = np.array([[1.0, 0.0]])
      P = np.eye(2) * 1000.0
      R = np.eye(1) * 5
      Q = Q_discrete_white_noise(2, 1.0, 0.0001)
  
      zs = [13.0, None, 1.0, 2.0] * 10
      m, c, _, _ = f.batch_filter(zs, update_first=False)
  
      n = len(zs)
      mp, cp, _, _ = batch_filter(
          x, P, zs, [F] * n, [Q] * n, [H] * n, [R] * n
      )
  
      for x1, x2 in zip(m, mp):
          assert np.allclose(x1, x2)
  
      for p1, p2 in zip(c, cp):
          assert np.allclose(p1, p2)
  
imports: from __future__ import absolute_import, division, print_function
  import numpy.random
  from numpy.random import randn
  import numpy
  import matplotlib.pyplot
  from pytest import approx
  from filterpy.kalman import KalmanFilter, update, predict, batch_filter
  from filterpy.common import Q_discrete_white_noise, kinematic_kf, Saver
  from filterpy.stats import mahalanobis
  from scipy.linalg import block_diag, norm
label_desc: Use image node_id 11 for calling a global function with example usage: test_procedural_batch_filter() without return types