code: def test_convolution(self):
      x = self.data.values.squeeze()
      res = convolution_filter(x, [0.75, 0.25])
      expected = self.expected.conv2
      np.testing.assert_almost_equal(res, expected)
  
      res = convolution_filter(x, [0.75, 0.25], nsides=1)
      expected = self.expected.conv1
      np.testing.assert_almost_equal(res, expected)
  
      x = self.datana.values.squeeze()
      res = convolution_filter(x, [0.75, 0.25])
      expected = self.expected.conv2_na
      np.testing.assert_almost_equal(res, expected)
  
      res = convolution_filter(x, [0.75, 0.25], nsides=1)
      expected = self.expected.conv1_na
      np.testing.assert_almost_equal(res, expected)
  
imports: from statsmodels.compat.pandas import QUARTER_END, assert_frame_equal, make_dataframe
  from datetime import datetime
  import numpy
  from numpy import array, column_stack
  from numpy.testing import assert_, assert_allclose, assert_almost_equal, assert_equal, assert_raises
  from pandas import DataFrame, concat, date_range
  from statsmodels.datasets import macrodata
  from statsmodels.tsa.filters._utils import pandas_wrapper
  from statsmodels.tsa.filters.bk_filter import bkfilter
  from statsmodels.tsa.filters.cf_filter import cffilter
  from statsmodels.tsa.filters.filtertools import convolution_filter, recursive_filter
  from statsmodels.tsa.filters.hp_filter import hpfilter
label_desc: Use image node_id 2 for calling the TestFilters obj's underlying member method code with example usage: obj.test_convolution() without return types