code: def _process_linear(context, node, add_relu=False):
      # Node has 4 inputs:
      # 1. The input activations
      # 2. The packed weights/biases (need to get from context.torch_graph)
      # 3. output scale
      # 4. output zero-point
  
      # Unpack PyTorch's packed params.
      if node.inputs[1] not in context:
          packed_params = context.torch_graph.params[node.inputs[1]]
          qweight, bias = _torch.ops.quantized.linear_unpack(
              packed_params
          )
          dequant_weights = _dequantized_weight(qweight)
          context.add(dequant_weights)
          bias = bias.detach().numpy()
      else:
          dequant_weights, bias = context[node.inputs[1]]
  
      x, x_dtype = context.quant_context.get_dequantized_var(
          node.inputs[0]
      )
  
      x, dequant_weights = promote_input_dtypes([x, dequant_weights])
      res = _create_linear_layer(x, dequant_weights, bias)
      if add_relu:
          res = mb.relu(x=res)
      context.add(res)
  
      out_scale = context[node.inputs[2]]
      out_zero_point = context[node.inputs[3]].val
      if out_scale.val != 0 or out_zero_point != 0:
          context.quant_context.get_quantized_per_tensor(
              res.name, x_dtype, out_scale, out_zero_point, node.name
          )
      else:
          context.add(res, node.name)
  
imports: import numpy
  import torch
  from coremltools import _logger
  from coremltools.converters.mil.mil import Builder
  from coremltools.converters.mil.mil import Var, types
  from .ops import NUM_TO_TORCH_DTYPE, _create_linear_layer, _get_inputs, promote_input_dtypes
  from .torch_op_registry import register_torch_op
label_desc: Use image node_id 8 for calling a global function with example usage: _process_linear(context, node, add_relu) without return types