code: def numba_funcify_QRFull(op, node, **kwargs):
      mode = op.mode
  
      if mode != "reduced":
          warnings.warn(
              (
                  "Numba will use object mode to allow the "
                  "`mode` argument to `numpy.linalg.qr`."
              ),
              UserWarning,
          )
  
          if len(node.outputs) > 1:
              ret_sig = numba.types.Tuple(
                  [get_numba_type(o.type) for o in node.outputs]
              )
          else:
              ret_sig = get_numba_type(node.outputs[0].type)
  
          @numba_basic.numba_njit
          def qr_full(x):
              with numba.objmode(ret=ret_sig):
                  ret = np.linalg.qr(x, mode=mode)
              return ret
  
      else:
          out_dtype = node.outputs[0].type.numpy_dtype
          inputs_cast = int_to_float_fn(node.inputs, out_dtype)
  
          @numba_basic.numba_njit(inline="always")
          def qr_full(x):
              return np.linalg.qr(inputs_cast(x))
  
      return qr_full
  
file_path: pytensor/pytensor/link/numba/dispatch/nlinalg.py
imports: import warnings
  import numba
  import numpy
  from pytensor.link.numba.dispatch import basic
  from pytensor.link.numba.dispatch.basic import get_numba_type, int_to_float_fn, numba_funcify
  from pytensor.tensor.nlinalg import SVD, Det, Eig, Eigh, MatrixInverse, MatrixPinv, QRFull, SLogDet
label_desc: Use image node_id 8 for calling a global function with example usage: numba_funcify_QRFull(op, node) and returns: qr_full, ret, np