code: def test_moving_average_multivariate(self):
      ma = MovingAverageFilter(window=3)
      sine_ts = tg.sine_timeseries(length=30, value_frequency=0.1)
      noise_ts = tg.gaussian_timeseries(length=30) * 0.1
      ts = sine_ts.stack(noise_ts)
      ts_filtered = ma.filter(ts)
  
      assert np.mean(np.abs(ts.values()[:, 0])) > np.mean(
          np.abs(ts_filtered.values()[:, 0])
      )
      assert np.mean(np.abs(ts.values()[:, 1])) > np.mean(
          np.abs(ts_filtered.values()[:, 1])
      )
  
imports: import numpy
  import pandas
  from nfoursid import kalman, state_space
  from sklearn.gaussian_process.kernels import RBF, ExpSineSquared
  from darts import TimeSeries
  from darts.metrics import rmse
  from darts.models.filtering.gaussian_process_filter import GaussianProcessFilter
  from darts.models.filtering.kalman_filter import KalmanFilter
  from darts.models.filtering.moving_average_filter import MovingAverageFilter
  from darts.utils import timeseries_generation
label_desc: Use image node_id 2 for calling the TestMovingAverage obj's underlying member method code with example usage: obj.test_moving_average_multivariate() without return types