code: def qr(a, method="tsqr"):
      """
      Compute the qr factorization of a matrix.
  
      Factor the matrix `a` as *qr*, where `q` is orthonormal and `r` is
      upper-triangular.
  
      Parameters
      ----------
      a : array_like, shape (M, N)
          Matrix to be factored.
      method: {'tsqr', 'sfqr'}, optional
          method to calculate qr factorization, tsqr as default
  
          TSQR is presented in:
  
              A. Benson, D. Gleich, and J. Demmel.
              Direct QR factorizations for tall-and-skinny matrices in
              MapReduce architectures.
              IEEE International Conference on Big Data, 2013.
              http://arxiv.org/abs/1301.1071
  
          FSQR is a QR decomposition for fat and short matrix:
              A = [A1, A2, A3, ...], A1 may be decomposed as A1 = Q1 * R1,
              for A = Q * R, Q = Q1, R = [R1, R2, R3, ...] where A2 = Q1 * R2, A3 = Q1 * R3, ...
  
      Returns
      -------
      q : Tensor of float or complex, optional
          A matrix with orthonormal columns. When mode = 'complete' the
          result is an orthogonal/unitary matrix depending on whether or not
          a is real/complex. The determinant may be either +/- 1 in that
          case.
      r : Tensor of float or complex, optional
          The upper-triangular matrix.
  
      Raises
      ------
      LinAlgError
          If factoring fails.
  
      Notes
      -----
      For more information on the qr factorization, see for example:
      http://en.wikipedia.org/wiki/QR_factorization
  
      Examples
      --------
      >>> import mars.tensor as mt
  
      >>> a = mt.random.randn(9, 6)
      >>> q, r = mt.linalg.qr(a)
      >>> mt.allclose(a, mt.dot(q, r)).execute()  # a does equal qr
      True
  
      """
      op = TensorQR(method=method)
      return op(a)
  
imports: import numpy
  from numpy.linalg import LinAlgError
  from ...None import opcodes
  from ...serialization.serializables import KeyField, StringField
  from ...core import ExecutableTuple
  from ..array_utils import device, as_same_device
  from ..datasource import tensor
  from ..operands import TensorHasInput, TensorOperandMixin
  from ..core import TensorOrder
  from .core import SFQR, TSQR
label_desc: Use image node_id 1 for calling a global function with example usage: qr(a, method) and returns: op