code: def from_dataloader(
      cls,
      dl: DataLoader,
      input_names: List[str],
      contains_y: bool = True,
  ):
      iterable_ds = iter(
          inputs[:-1] if contains_y else inputs for inputs in dl
      )
      return cls(iterable_ds, input_names)
  
file_path: nebuly/optimization/nebullvm/nebullvm/operations/optimizations/compilers/quantizations/onnx.py
imports: from pathlib import Path
  from typing import Union, Iterable, Tuple, List
  import cpuinfo
  import numpy
  from nebullvm.core.models import QuantizationType, Device, DeviceType
  from nebullvm.optional_modules.onnx import onnx, convert_float_to_float16_model_path
  from nebullvm.optional_modules.onnxruntime import CalibrationDataReader, QuantType, quantize_dynamic, quantize_static
  from nebullvm.optional_modules.torch import DataLoader
  from nebullvm.tools.onnx import get_input_names
  from nebullvm.tools.transformations import MultiStageTransformation, HalfPrecisionTransformation
label_desc: Use image node_id 3 for calling the _IterableCalibrationDataReader obj's underlying member method code with example usage: obj.from_dataloader(cls, dl, input_names, contains_y) and returns: cls