docs: def economic_qs_linear(G):
      r"""Economic eigen decomposition for symmetric matrices ``dot(G, G.T)``.
  
      It is theoretically equivalent to ``economic_qs(dot(G, G.T))``.
      Refer to :func:`numpy_sugar.economic_qs` for further information.
  
      Args:
          G (array_like): Matrix.
  
      Returns:
          tuple: ``((Q0, Q1), S0)``.
      """
      import dask.array as da
  
      if not isinstance(G, da.Array):
          G = asarray(G, float)
  
      if G.shape[0] > G.shape[1]:
          (Q, Ssq, _) = svd(G, full_matrices=True)
          S0 = Ssq ** 2
          rank = len(S0)
          Q0, Q1 = Q[:, :rank], Q[:, rank:]
          return ((Q0, Q1), S0)
  
      return economic_qs(G.dot(G.T))