code: def _characterize_quantized_model_perf(fpmodel, qspec, sample_data):
      qmodel = _get_model(qspec)
      model_metrics = ModelMetrics(qspec)
  
      print("\n\n")
      print("Analyzing {} samples".format(len(sample_data)))
      print("Running Analysis this may take a while ...")
      print("\n")
  
      analyzed = 0
      tried = 0
      fpmodel = _MLModel(
          fpmodel.get_spec(), compute_units=_ComputeUnit.CPU_ONLY
      )
      qmodel = _MLModel(
          qmodel.get_spec(), compute_units=_ComputeUnit.CPU_ONLY
      )
      for data in sample_data:
          try:
              fp_pred = fpmodel.predict(data)
              q_pred = qmodel.predict(data)
              analyzed += 1
              model_metrics.add_metrics(fp_pred, q_pred)
  
          except Exception as e:
              print(e)
              continue
  
          # Update Progress
          tried += 1
          if tried % 10 == 0:
              _stdout.write("\r")
              _stdout.write(
                  "Analyzed {}/{}".format(tried, len(sample_data))
              )
              _stdout.flush()
  
      print("\n")
      model_metrics.display_metrics()
  
imports: from os import listdir
  from sys import stdout
  import numpy
  from coremltools import ComputeUnit, _logger
  from coremltools._deps import _HAS_KMEANS1D, _kmeans1d
  from coremltools.models import _QUANTIZATION_MODE_CUSTOM_LOOKUP_TABLE, _QUANTIZATION_MODE_DEQUANTIZE, _QUANTIZATION_MODE_LINEAR_QUANTIZATION, _QUANTIZATION_MODE_LINEAR_SYMMETRIC, _QUANTIZATION_MODE_LOOKUP_TABLE_KMEANS, _QUANTIZATION_MODE_LOOKUP_TABLE_LINEAR, _SUPPORTED_QUANTIZATION_MODES, MLModel
  from ...None import _MINIMUM_FP16_SPEC_VERSION, _MINIMUM_QUANTIZED_MODEL_SPEC_VERSION, _SPECIFICATION_VERSION_IOS_14
  from ..utils import _get_model, _macos_version, _wp_to_fp16wp
  from .optimization_utils import _optimize_nn
label_desc: Use image node_id 18 for calling a global function with example usage: _characterize_quantized_model_perf(fpmodel, qspec, sample_data) without return types