class_docstr: The abstract class for the compression graph passes.
class_docstr_tok: ["The","abstract","class","for","the","compression","graph","passes","."]
code: def apply(self, prog):
      if not isinstance(prog, Program):
          raise TypeError(
              'Transform "{}" can only be applied on PyMIL programs.'.format(
                  self
              )
          )
  
      @block_context_manager
      def apply_block(block):
          if not is_current_opset_version_compatible_with(
              self._MINIMUM_OPSET_VERSION
          ):
              logger.warning(
                  f"The program's opset is not compatible with {self._MINIMUM_OPSET_VERSION}. "
                  f"Skipped the compression pass {self.__class__}."
              )
              return
  
          valid_consts = []
          for op in list(block.operations):
              for b in op.blocks:
                  apply_block(b)
  
              if self.is_valid_op(op):
                  need_transform = True
                  if self.op_selector is not None:
                      need_transform = self.op_selector(op)
  
                  if need_transform:
                      valid_consts.append(op)
  
          for op in tqdm(
              valid_consts,
              desc=f"Running compression pass {self.__class__.__name__}",
              unit=" ops",
          ):
              self.transform_op(op)
  
      for f in prog.functions.values():
          apply_block(f)
  
imports: from typing import Callable, Optional, Tuple
  import numpy
  from tqdm import tqdm
  from coremltools import _logger
  from coremltools.converters.mil._deployment_compatibility import AvailableTarget
  from coremltools.converters.mil.backend.mil.load import should_use_weight_file
  from coremltools.converters.mil.mil import Builder
  from coremltools.converters.mil.mil import Operation, Program, types
  from coremltools.converters.mil.mil.block import is_current_opset_version_compatible_with
  from coremltools.converters.mil.mil.ops.defs._utils import pack_elements_into_bits
  from coremltools.converters.mil.mil.ops.defs.iOS16 import constexpr_affine_dequantize, constexpr_lut_to_dense, constexpr_sparse_to_dense
  from coremltools.converters.mil.mil.passes.defs.quantization import AbstractQuantizationPass
  from coremltools.converters.mil.mil.passes.helper import block_context_manager
  from coremltools.converters.mil.mil.passes.pass_registry import register_pass
  from coremltools.converters.mil.mil.types.type_mapping import nptype_from_builtin
  from coremltools.models.neural_network.quantization_utils import _get_kmeans_lookup_table_and_weight
  from coremltools.optimize.coreml._config import OpLinearQuantizerConfig, OpMagnitudePrunerConfig, OpPalettizerConfig, OpThresholdPrunerConfig, OptimizationConfig
label_desc: Use image node_id 2 for calling the AbstractCompressionPass obj's underlying member method code with example usage: obj.apply(prog) without return types