code: def _mul_scalar():
      # this is used for mobilenet v3
      def _impl(inputs, _):
          # refer to aten/src/ATen/native/quantized/cpu/qmul.cpp
          # math for calculating output scale and zp are already done
          # during _add_output_quant_params_to_scalar_op above
          assert (
              len(inputs) == 6
          ), "Input quant params not found in op inputs"
          other_val = inputs[1]  # scalar
  
          if other_val > 0.0:
              # only scale change
              return inputs[0]
          if other_val == 0.0:
              shape = infer_shape(inputs[0])
              return _op.full(_expr.const(0), shape, dtype="uint8")
  
          # negative scale case
          q_min = 0
          q_max = 255
          bias = _expr.const(q_max + q_min, dtype="int8")
          int8 = bias - _op.cast(inputs[0], "int8")
          return _op.cast(int8, "uint8")
  
      return _impl
  
imports: import numpy
  import tvm
  from tvm import relay
  from tvm.relay import expr
  from tvm.relay import op
  from tvm.relay.frontend.common import infer_shape
  from .common import logger
  from .pytorch_utils import is_version_greater_than
label_desc: Use image node_id 32 for calling a global function with example usage: _mul_scalar() and returns: _impl, _op, inputs, _op