def svdvals(a, driver:'svd')
    case driver.to_s
    when /^(ge)?sdd$/i, "turbo"
      Lapack.call(:gesdd, a, jobz:'N')[0]
    when /^(ge)?svd$/i
      Lapack.call(:gesvd, a, jobu:'N', jobvt:'N')[0]
    else
      raise ArgumentError, "invalid driver: #{driver}"
    end
  end
def svdvals(a, driver:'svd')
    case driver.to_s
    when /^(ge)?sdd$/i, "turbo"
      Lapack.call(:gesdd, a, jobz:'N')[0]
    when /^(ge)?svd$/i
      Lapack.call(:gesvd, a, jobu:'N', jobvt:'N')[0]
    else
      raise ArgumentError, "invalid driver: #{driver}"
    end
  end
Computes the Singular Values of a M-by-N matrix A.
 The SVD is written

     A = U * SIGMA * transpose(V)

 where SIGMA is an M-by-N matrix which is zero except for its
 min(m,n) diagonal elements. The diagonal elements of SIGMA
 are the singular values of A; they are real and non-negative, and
 are returned in descending order.

 @param a [Numo::NArray] m-by-n matrix A (>= 2-dimensinal NArray)
 @param driver [String or Symbol] choose LAPACK solver from 'svd',
   'sdd'. (optional, default='svd')
 @return [Numo::NArray] returns SIGMA (singular values).