def convert_single_node(context: TranscriptionContext, node: InternalTorchIRNode) -> None:
    """
    Converts a single lowered PyTorch op to MIL.

    Arguments:
        context: A TranscriptionContext object to pull node inputs and assign node outputs.
        node: lowered PyTorch op to convert.
    """
    op_lookup = node.kind
    add_op = _TORCH_OPS_REGISTRY.get_func(op_lookup)
    if add_op is None:
        if re.match(r".*_dynamic", op_lookup):
            raise RuntimeError(
                f"PyTorch convert function for op '{op_lookup}' not implemented.\n"
                "Dynamic quantized models are not supported by Core ML.\n"
                "Please use static quantization or the APIs in coremltools.optimize to quantize/compress models."
            )
        else:
            raise RuntimeError(
                f"PyTorch convert function for op '{op_lookup}' not implemented."
            )

    logger.info("Converting op {} : {}".format(node.name, op_lookup))

    scopes = []
    if context.frontend == TorchFrontend.TORCHSCRIPT:
        scope_name, scope_type = node.get_scope_info()
        scopes = [
            ScopeInfo(source=ScopeSource.TORCHSCRIPT_MODULE_TYPE, data=scope_type),
            ScopeInfo(source=ScopeSource.TORCHSCRIPT_MODULE_NAME, data=scope_name),
        ]
    elif context.frontend in TORCH_EXPORT_BASED_FRONTENDS:
        scopes = [
            ScopeInfo(source=ScopeSource.EXIR_STACK_TRACE, data=[node.meta.get("stack_trace")]),
            ScopeInfo(
                source=ScopeSource.EXIR_DEBUG_HANDLE, data=[node.meta.get("debug_handle", None)]
            ),
        ]
    else:
        raise ValueError(f"Invalid PyTorch frontend {context.frontend}")

    with mb.scope(*scopes):
        if context.frontend == TorchFrontend.TORCHSCRIPT:
            context.quant_context.maybe_handle_quantized_inputs(node)

        # Only torch script needs to prepare
        if context.frontend == TorchFrontend.TORCHSCRIPT:
            context.convert_input_to_tensor_type(node)

        add_op(context, node)
        if _TORCH_OPS_REGISTRY.is_inplace_op(op_lookup):
            context.process_inplace_op(node)

    Converts a single lowered PyTorch op to MIL.

    Arguments:
        context: A TranscriptionContext object to pull node inputs and assign node outputs.
        node: lowered PyTorch op to convert.
    
coremltools/converters/mil/frontend/torch/ops.py