docstr: Test quantization for per_channel dynamic quantization
          
docstr_tok: ["Test","quantization","for","per_channel","dynamic","quantization"]
code: def test_per_channel_linear_quantize(self):
      r"""Test quantization for per_channel dynamic quantization"""
      model = NestedModel().eval()
      qconfig_dict = {torch.nn.Linear: per_channel_dynamic_qconfig}
  
      prepare_dynamic(model, qconfig_dict)
      test_only_eval_fn(model, self.calib_data)
      convert_dynamic(model)
  
      def checkQuantized(model):
          self.checkDynamicQuantizedLinear(
              model.sub1.fc, dtype=torch.qint8
          )
          self.checkDynamicQuantizedLinear(model.fc3, dtype=torch.qint8)
          self.checkDynamicQuantizedLinear(
              model.sub2.fc1, dtype=torch.qint8
          )
          self.checkDynamicQuantizedLinear(
              model.sub2.fc2, dtype=torch.qint8
          )
          test_only_eval_fn(model, self.calib_data)
          self.checkScriptable(
              model, self.calib_data, check_save_load=True
          )
          self.checkNoQconfig(model)
  
      checkQuantized(model)
      # test one line API
      model = quantize_dynamic(NestedModel().eval(), qconfig_dict)
      checkQuantized(model)
  
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 7 for calling the TestQuantizeEagerPTQDynamic obj's underlying member method code with example usage: obj.test_per_channel_linear_quantize() without return types