code: def test_functional_module(self, train_mode):
      model = ModelWithFunctionals()
      x = torch.rand(10, 1, dtype=torch.float)
      xq = torch.quantize_per_tensor(x, 0.01, 30, torch.quint8)
      self.checkScriptable(model, [[x]], check_save_load=True)
      if train_mode:
          model.qconfig = torch.ao.quantization.get_default_qat_qconfig(
              "fbgemm"
          )
          model = prepare_qat(model)
      else:
          model.qconfig = torch.ao.quantization.get_default_qconfig(
              "qnnpack"
          )
          model = prepare(model)
      # Check if observers and quant/dequant nodes are inserted
      self.checkNoPrepModules(model)
      self.checkObservers(model)
      # Calibrate
      model(xq.dequantize())
      model = convert(model)
  
      def checkQuantized(model):
          self.checkNoPrepModules(model)
          self.assertEqual(
              type(model.myadd), torch.ao.nn.quantized.QFunctional
          )
          self.assertEqual(
              type(model.mycat), torch.ao.nn.quantized.QFunctional
          )
          self.assertEqual(
              type(model.myadd_relu), torch.ao.nn.quantized.QFunctional
          )
          self.assertEqual(
              type(model.mymatmul), torch.ao.nn.quantized.QFunctional
          )
          self.checkNoQconfig(model)
  
      checkQuantized(model)
      self.checkScriptable(model, [[xq]], check_save_load=True)
  
imports: import torch
  import torch.nn
  import torch.ao.nn.quantized
  from torch.nn.utils.rnn import PackedSequence
  from torch.ao.quantization import quantize, prepare, convert, prepare_qat, quantize_dynamic, QuantWrapper, QuantStub, DeQuantStub, default_qconfig, default_dynamic_qconfig, per_channel_dynamic_qconfig, float16_dynamic_qconfig, float_qparams_weight_only_qconfig, float_qparams_weight_only_qconfig_4bit, FixedQParamsObserver, PerChannelMinMaxObserver, default_dynamic_quant_observer, default_weight_observer, QConfig
  from torch.testing._internal.common_quantization import QuantizationTestCase, AnnotatedSingleLayerLinearModel, QuantStubModel, ModelWithFunctionals, SingleLayerLinearDynamicModel, TwoLayerLinearModel, NestedModel, ResNetBase, RNNDynamicModel, RNNCellDynamicModel, ActivationsTestModel, NormalizationTestModel, test_only_eval_fn, prepare_dynamic, convert_dynamic, skipIfNoFBGEMM, EmbeddingBagModule, EmbeddingModule, EmbeddingWithStaticLinear, LinearReluLinearModel
  from torch.testing._internal.common_quantization import AnnotatedTwoLayerLinearModel, AnnotatedNestedModel, AnnotatedSubNestedModel, AnnotatedCustomConfigNestedModel, AnnotatedSkipQuantModel
  from torch.testing._internal.common_quantized import override_quantized_engine, supported_qengines, override_qengines
  from hypothesis import given
  from hypothesis import strategies
  import torch.testing._internal.hypothesis_utils
  from typing import Tuple
  import numpy
label_desc: Use image node_id 13 for calling the TestQuantizeEagerOps obj's underlying member method code with example usage: obj.test_functional_module(train_mode) without return types