code: def test_get_action_max_pooling(
      self, filters, strides, pool_strides, pool_shapes
  ):
      with mock.patch(
          (
              "garage.tf.q_functions."
              "discrete_cnn_q_function.CNNModelWithMaxPooling"
          ),
          new=SimpleCNNModelWithMaxPooling,
      ):
          with mock.patch(
              (
                  "garage.tf.q_functions."
                  "discrete_cnn_q_function.MLPModel"
              ),
              new=SimpleMLPModel,
          ):
              qf = DiscreteCNNQFunction(
                  env_spec=self.env.spec,
                  filters=filters,
                  strides=strides,
                  max_pooling=True,
                  pool_strides=pool_strides,
                  pool_shapes=pool_shapes,
                  dueling=False,
              )
  
      action_dim = self.env.action_space.n
      expected_output = np.full(action_dim, 0.5)
      outputs = self.sess.run(
          qf.q_vals, feed_dict={qf.input: [self.obs]}
      )
      assert np.array_equal(outputs[0], expected_output)
      outputs = self.sess.run(
          qf.q_vals,
          feed_dict={qf.input: [self.obs, self.obs, self.obs]},
      )
      for output in outputs:
          assert np.array_equal(output, expected_output)
  
imports: import pickle
  from unittest import mock
  import numpy
  import pytest
  import tensorflow
  from garage.envs import GymEnv
  from garage.tf.models import CNNModel
  from garage.tf.q_functions import DiscreteCNNQFunction
  from tests.fixtures import TfGraphTestCase
  from tests.fixtures.envs.dummy import DummyDiscreteEnv, DummyDiscretePixelEnv
  from tests.fixtures.models import SimpleCNNModel, SimpleCNNModelWithMaxPooling, SimpleMLPModel
label_desc: Use image node_id 7 for calling the TestDiscreteCNNQFunction obj's underlying member method code with example usage: obj.test_get_action_max_pooling(filters, strides, pool_strides, pool_shapes) without return types