def get_input_args_quant_dequant_info(
    seen_q_op_info: SeenQOpInfo,
    tensor_id_to_scale_zp: Dict[int, Tuple[torch.Tensor, torch.Tensor]],
) -> Tuple[List[Optional[Tuple[float, int, torch.dtype]]], List[bool], bool]:
    """
    Returns a list of information about the tensor inputs to the current op.
    Quant list:
    For each tensor input:
    * if the tensor input needs a quant, the list will contain
      (scale, zero_point)
    * if the tensor input does not need a quant, the list will contain None
    """
    quant_infos: List[Optional[Tuple[float, int, torch.dtype]]] = []
    quantized_dtype = [torch.quint8, torch.qint8]
    any_arg_quant_or_dequant_needed = []
    if len(seen_q_op_info.input_tensor_infos) > 0:
        for i, input_arg in enumerate(seen_q_op_info.input_tensor_infos):
            if input_arg is not None:
                if input_arg.id in tensor_id_to_scale_zp:
                    tensor_id = input_arg.id
                    inf_dtype = input_arg.inf_dtype
                    # force_inf_dtype always should be same as input_arg.inf_dtype, but some time,
                    # the input arg may be used by many other operators, and it may have been
                    # changed by other operators, so for cur op, twe check whether input_arg.inf_dtype
                    # is same as the origin force_inf_dtype, if not same use force_inf_dtype as new
                    # inf dtype, if same, we can say the input_arg.inf_dtype is not changed or the cur op
                    # changed input_arg.inf_dtype and force_inf_dtype at get default recipe step.
                    if (
                        seen_q_op_info.input_tensor_force_inf_dtype[i]
                        != input_arg.inf_dtype
                    ):
                        inf_dtype = seen_q_op_info.input_tensor_force_inf_dtype[i]

                    scale, zp = tensor_id_to_scale_zp[tensor_id]
                    quant_infos.append((scale, zp, inf_dtype))  # type: ignore[arg-type]
                    # only support float to int8.
                    if (
                        input_arg.orig_dtype == torch.float32
                        and inf_dtype in quantized_dtype
                    ):
                        any_arg_quant_or_dequant_needed.append(True)
                    else:
                        any_arg_quant_or_dequant_needed.append(False)
                else:
                    quant_infos.append(None)
                    any_arg_quant_or_dequant_needed.append(False)
            else:
                quant_infos.append(None)
                any_arg_quant_or_dequant_needed.append(None)
    return quant_infos, any_arg_quant_or_dequant_needed

    Returns a list of information about the tensor inputs to the current op.
    Quant list:
    For each tensor input:
    * if the tensor input needs a quant, the list will contain
      (scale, zero_point)
    * if the tensor input does not need a quant, the list will contain None
    
intel_extension_for_pytorch/quantization/_quantization_state_utils.py