code: def test_convolution2d(self):
      x = self.data.values
      res = convolution_filter(x, [[0.75], [0.25]])
      expected = self.expected.conv2
      np.testing.assert_almost_equal(res, expected[:, None])
      res = convolution_filter(
          np.c_[x, x], [[0.75, 0.75], [0.25, 0.25]]
      )
      np.testing.assert_almost_equal(res, np.c_[expected, expected])
  
      res = convolution_filter(x, [[0.75], [0.25]], nsides=1)
      expected = self.expected.conv1
      np.testing.assert_almost_equal(res, expected[:, None])
  
      x = self.datana.values
      res = convolution_filter(x, [[0.75], [0.25]])
      expected = self.expected.conv2_na
      np.testing.assert_almost_equal(res, expected[:, None])
  
      res = convolution_filter(x, [[0.75], [0.25]], nsides=1)
      expected = self.expected.conv1_na
      np.testing.assert_almost_equal(res, expected[:, None])
  
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 3 for calling the TestFilters obj's underlying member method code with example usage: obj.test_convolution2d() without return types